您需要遍历 list
(并且不应该使用 list
作为变量名,因为它会掩盖内置的 list
函数)。例如 -
[key for item in lst for key,value in my_dict.items() if item in value]
演示 -
>>> my_dict =
>>>
>>> lst = [ 'value1', 'value2' ]
>>> [key for item in lst for key,value in my_dict.items() if item in value]
['a', 'b']
如果您使用set
而不是list
来存储字典中的值,您可以获得更好的性能(因为在集合内搜索是O(1)操作,而在列表内搜索是O(n)操作)。例如:
my_dict = {key:set(value) for key,value in my_dict.items()}
[key for item in lst for key,value in my_dict.items() if item in value]
示例 -
>>> my_dict = {key:set(value) for key,value in my_dict.items()}
>>> pprint(my_dict)
{'a': {'value4', 'value5', 'value1'},
'b': {'value6', 'value7', 'value2'},
'c': {'value3', 'value9', 'value8'}}
>>> lst = [ 'value1', 'value2' ]
>>> [key for item in lst for key,value in my_dict.items() if item in value]
['a', 'b']
如果您想检查列表中的任何值是否与字典中的列表中的任何值匹配,可以使用
set.intersection
函数,并检查结果是否为空。示例 -
[key for key, value in my_dict.items() if set(value).intersection(lst)]
由于字典没有特定的顺序,因此此结果不会被排序。
演示 -
>>> my_dict = {
... 'a' : [ 'value1', 'value4', 'value5' ],
... 'b' : [ 'value2', 'value6', 'value7'],
... 'c' : [ 'value3', 'value8', 'value9']
... }
>>> lst = [ 'value1', 'value2' ]
>>> [key for key, value in my_dict.items() if set(value).intersection(lst)]
['b', 'a']
if [ 'value1', 'value4', 'value5' ] in list
。顺带一提。 - kylieCatt