我有一个字典列表 list_of_dict
,一组键 set_of_keys
和另一个字典 dict_to_compare
。
如果三个可能键中任意两个的值与 dict_to_compare
中的值匹配,我需要过滤字典列表。
输入:
set_of_keys = {'val1', 'val2', 'val3'}
dict_to_compare = {'k1': 'val1', 'k2': 'val2','k3':'val6'}
list_of_dict = [
{'k1': 'val1', 'k2': 'val2', 'k3':'val3'},
{'k1': 'val4', 'k2': 'val5', 'k3':'val6'},
{'k1': 'val7', 'k2': 'val8', 'k3':'val9'}
]
输出:
out = [{'k1': 'val1', 'k2': 'val2', 'k3': 'val3'}] #First element from list
list_of_dicts
中的所有元素都具有相同的键。dict_to_compare
也具有与list_of_dicts
元素相同的键。- 可以匹配
list_of_dicts
中的多个元素。 - 针对两个键的任意组合的值不应匹配所有三个键。
我尝试通过明确指定一堆 if
elif
条件来做到这一点。但问题是 key 集真的很大。有没有更好的方法来解决这个问题?
谢谢
最佳答案
你可以使用sum
:
dict_to_compare = {'k1': 'val1', 'k2': 'val2','k3':'val6'}
set_of_keys = {'val1', 'val2', 'val3'}
list_of_dict = [
{'k1': 'val1', 'k2': 'val2', 'k3':'val3'},
{'k1': 'val4', 'k2': 'val5', 'k3':'val6'},
{'k1': 'val7', 'k2': 'val8', 'k3':'val9'}
]
final_list = [i for i in list_of_dict if sum(c in set_of_keys for c in i.values()) >= 2]
输出:
[{'k3': 'val3', 'k2': 'val2', 'k1': 'val1'}]
关于python - 根据另一个字典的值过滤字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47535715/