python - 根据所选键比较 2 个字典列表,无需 for 循环

标签 python list dictionary compare

假设我有这两个字典列表:

Dict1=[
    {"name": "James","age": "21"},
    {"name": "Evelyn","age": "28"},
    {"name": "William","age": "31"}
]

Dict2=[
    {"name": "James","age": "21","city":"NYC","Gender":"M"},
    {"name": "William","age": "25","city":"NYC","Gender":"M"},
    {"name": "Ella","age": "17","city":"NYC","Gender":"F"}
]

我如何仅根据名称键比较它们并从 dict2 中获取整个条目,在这种情况下,结果必须是:

new_dict=[
    {"name": "James","age": "21","city":"NYC","Gender":"M"},
    {"name": "William","age": "25","city":"NYC","Gender":"F"},
]

我正在寻找一种基于一个或多个选定键而不使用 for 循环进行比较的方法。

最佳答案

如果没有循环,你想做的事是不可能的。您最终可以通过使用库或复杂的方式隐藏循环,但最简单的方法是循环。

现在有循环的坏方法好方法。不好的做法是检查 Dict1 的每个元素以获取 Dict2 的每个元素(O(n*m) 复杂度)。

好的方法是为 Dict1 中的名称构造一个集合 索引,并使用它们来匹配 Dict2 中的名称:

names = set(d['name'] for d in Dict1)
new_dict = [d for d in Dict2 if d['name'] in names]

输出:

>>> new_dict
[{'name': 'James', 'age': '21', 'city': 'NYC', 'Gender': 'M'},
 {'name': 'William', 'age': '25', 'city': 'NYC', 'Gender': 'M'}]

关于python - 根据所选键比较 2 个字典列表,无需 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70152679/

相关文章:

python - 从输入访问字典内的列表

c# - 覆盖 Dictionary.Add

python dict.add_by_value(dict_2)?

python - 如何在 Python/OpenCV 中将图像分割成干净的段落?

python - 将数组列表转换为数据帧

Java:在链接列表中挑选多个元素

list - Prolog、列表和对的新手

python字典值以0开头

python - 如何获取 Pandas 中数据框的移位索引值?

python - Github ssh-action 配置在django 应用程序中部署更改