Python vlookup在字典列表之间

我想在两个字典列表之间做一个 vlookup,但我不想使用熊猫,我想使用纯 python 或另一个光库。

我想在两个字典列表之间做一个 vlookup,但我不想使用熊猫,我想使用纯 python 或另一个光库。

所以我有第一个列表:

dict_1 = [{'Name': 'Grant', 'Number': 1111, 'Adress': 'Sal'},
          {'Name': 'Jhon', 'Number': 2222, 'Adress': 'Sal_3'}]

然后我有第二个:

dict_2 = [{'Name': 'Grant', 'High': 3333, 'Tell': 'None1'},
          {'Name': 'Jhon', 'High': 4444, 'Tell': 'None2'}]

我想要一个新的字典列表,其中主键是两个列表之间的“名称”。

[{'Name': 'Grant',
  'Number': 1111,
  'Adress': 'Sal',
  'High': 3333,
  'Tell': 'None1'},
 {'Name': 'Jhon',
  'Number': 2222,
  'Adress': 'Sal_3',
  'High': 4444,
  'Tell': 'None2'}]
3

您需要一个主dictName分组,然后更新值以合并所有 dict,最后只保留它的值(合并的 dict)

result = {}
for value in dict_1 + dict_2:
    result.setdefault(value['Name'], {}).update(value)
result = list(result.values())
# after loop
{'Grant': {'Name': 'Grant', 'Number': 1111, 'Adress': 'Sal', 'High': 3333, 'Tell': 'None1'}, 
 'Jhon': {'Name': 'Jhon', 'Number': 2222, 'Adress': 'Sal_3', 'High': 4444, 'Tell': 'None2'}}
# final result
[{'Name': 'Grant', 'Number': 1111, 'Adress': 'Sal', 'High': 3333, 'Tell': 'None1'}, 
 {'Name': 'Jhon', 'Number': 2222, 'Adress': 'Sal_3', 'High': 4444, 'Tell': 'None2'}]
1

您可以使用itertools.product()获取两个列表之间的笛卡尔积,然后仅保留在'Name'键上匹配的字典:

from itertools import product
dict_1 = [{'Name': 'Grant', 'Number': 1111, 'Adress': 'Sal'},
          {'Name': 'Jhon', 'Number': 2222, 'Adress': 'Sal_3'}]
dict_2 = [{'Name': 'Grant', 'High': 3333, 'Tell': 'None1'},
{'Name': 'Jhon', 'High': 4444, 'Tell': 'None2'}]
result = [{**a, **b} for a, b in product(dict_1, dict_2) if a['Name'] == b['Name']]
print(result)

这打印:

[{'Name': 'Grant', 'Number': 1111, 'Adress': 'Sal', 'High': 3333, 'Tell': 'None1'},
 {'Name': 'Jhon', 'Number': 2222, 'Adress': 'Sal_3', 'High': 4444, 'Tell': 'None2'}]

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(897)
如何在solr6.4版本上启用开箱即用的“techproducts”示例
上一篇
如何使CSS内容斜体和粗体
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(72条)