python - 如果键和值与其他字典不匹配,则从字典列表中删除字典

标签 python python-3.x algorithm dictionary

我有一个字典列表,我想按其他字典中的值过滤它。

orig_list = [{"name":"Peter","last_name":"Wick","mail":"Peter@mail.com","number":"111"},
{"name":"John","last_name":"Hen","mail":"John@mail.com","number":"222"},
{"name":"Jack","last_name":"Malm","mail":"Jack@mail.com","number":"542"},
{"name":"Anna","last_name":"Hedge","mail":"Anna@mail.com"},
{"name":"Peter","last_name":"Roesner","mail":"Peter2@mail.com","number":"445"},
{"name":"Tino","last_name":"Tes","mail":"Tino@mail.com","number":"985"},]

预期结果示例 1:

filter = {"name":"Peter"}

orig_list[{"name":"Peter","last_name":"Wick","mail":"Peter@mail.com","number":"111"},
{"name":"Peter","last_name":"Roesner","mail":"Peter2@mail.com","number":"445"}]

预期结果示例 2:

filter = {"name":"Peter","number":"445"}

orig_list[
{"name":"Peter","last_name":"Roesner","mail":"Peter2@mail.com","number":"445"}]

过滤器可以有多个键。可能的键是(姓名、姓氏、号码)。 基本上我想要的是遍历字典列表并检查每个字典是否包含来自给定过滤器的键,如果包含,则检查键值是否匹配。如果他们不这样做,则从字典列表中删除整个字典。

最终列表不必是 orig_list。它可以是一个新列表。所以从 orig_list 中删除字典不是强制性的。字典也可以复制到新的字典列表中。

最佳答案

您可以使用列表理解:

orig_list = [{"name":"Peter","last_name":"Wick","mail":"Peter@mail.com","number":"111"},
{"name":"John","last_name":"Hen","mail":"John@mail.com","number":"222"},
{"name":"Jack","last_name":"Malm","mail":"Jack@mail.com","number":"542"},
{"name":"Anna","last_name":"Hedge","mail":"Anna@mail.com"},
{"name":"Peter","last_name":"Roesner","mail":"Peter2@mail.com","number":"445"},
{"name":"Tino","last_name":"Tes","mail":"Tino@mail.com","number":"985"},]

filter_by = {"name":"Peter"}


result = [dic for dic in orig_list if all(key in dic and dic[key] == val for key, val in filter_by.items())]
print(result)

输出:

[
  {
    "name": "Peter",
    "last_name": "Wick",
    "mail": "Peter@mail.com",
    "number": "111"
  },
  {
    "name": "Peter",
    "last_name": "Roesner",
    "mail": "Peter2@mail.com",
    "number": "445"
  }
]

对于 filter_by = {"name":"Peter","number":"445"} 你得到:

[
  {
    "name": "Peter",
    "last_name": "Roesner",
    "mail": "Peter2@mail.com",
    "number": "445"
  }
]

关于python - 如果键和值与其他字典不匹配,则从字典列表中删除字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547096/

相关文章:

python - 如何将 functools.partial 用于类方法?

python - 我应该将编码 ='utf-8' 添加到我的 Python 日志记录处理程序吗?

python - 在 Python 运行时,有没有办法区分文字字符串实例和动态创建的实例?

algorithm - 图的邻接表表示

mysql - 如何在 MySQL 数据库中维护递归不变量?

python - Pandas - 用非空值的聚合替换 NaN

python - 在 PIL 中绘制半透​​明多边形

python-3.x - 如何修改 Python 中的列表?

python-3.x - 使用Python 3.6对.cat文件进行简单移动平均

c - 算法工具箱 : Maximize Arithmetic expression using parentheses? 失败的测试用例 #5/19