您可以使用列表理解:
my_dict = {'fruit':'apple','colour':'blue','meat':'beef'}
print [key for key, value in my_dict.items() if value == 'apple']
上面的代码几乎完全符合您的要求:
打印键,其中 dict[key] == 'apple'
列表理解正在遍历字典items
方法给出的所有键值对,并创建一个值为“apple”的所有键的新列表。
正如 Niklas 指出的那样,当您的值可能是列表时,这不起作用。在这种情况下,您必须小心使用in
,因为'apple' in 'pineapple' == True
. 因此,坚持使用列表理解方法需要进行一些类型检查。因此,您可以使用如下辅助函数:
def equals_or_in(target, value):
"""Returns True if the target string equals the value string or,
is in the value (if the value is not a string).
"""
if isinstance(target, str):
return target == value
else:
return target in value
然后,下面的列表理解将起作用:
my_dict = {'fruit':['apple', 'banana'], 'colour':'blue'}
print [key for key, value in my_dict.items() if equals_or_in('apple', value)]