python - 根据另一个字典的值过滤字典列表

标签 python python-3.x

我有一个字典列表 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/

相关文章:

python - PyGtk3,单击按钮时捕获单击事件

PYTHONPATH 共享库问题

python 3 : How do I use bytes-to-bytes and string-to-string encodings

python - Plotly 图表未显示在 PyCharm 中

python - 使用 appJar 在 TreeView 中查看 XML 文件

Python:创建一个新窗口,访问它的像素并激活它们

python-3.x - 在 pytorch 中学习之前对图像进行标准化

python - 如何读取范围 ('A5:B10' )并使用 openpyxl 将这些值放入数据框中

python - 如何根据Python中选择列右侧每行中的nan的数量对数据帧进行子集化?

python - python : BS, selenium 中的网页抓取,无错误