Python3如何通过唯一键连接两个dicts列表

Python3如何通过唯一键连接两个dicts列表,第1张

概述我有两个清单: list1 = [ {'sth': 13, 'important_key1': 'AA', 'important_key2': '3'}, {'oh!': 14, 'important_key1': 'FF', 'important_key2': '4'}, {'sth_else': 'abc', 'important_key1': 'ZZ', 'important_key2': 我有两个清单:
List1 = [ {'sth': 13,'important_key1': 'AA','important_key2': '3'},{'oh!': 14,'important_key1': 'FF','important_key2': '4'},{'sth_else': 'abc','important_key1': 'ZZ','important_key2': '5'}]List2 = [ {'why-not': 'tAk','important_key1': 'GG',{'hmmm': 'no','important_key2': '3'}]

我想返回一个仅包含来自List1的对象的列表,但如果同一个important_key1和important_key2在List2中的任何元素中,我想从List2中获取该元素.

所以输出应该是:

[ {'hmmm': 'no','important_key2': '5'}]

通过两个或三个循环来做它并不复杂,但我想知道是否有一种简单的方法可以使用列表推导或类似的东西.

这是“正常”的方式:

List1 = [ {'sth': 13,'important_key2': '4'}]List2 = [ {'hmmm': 'no',{'why-not': 'tAk','important_key2': '4'}]final_List = []for element in List1:    there_was_in_List2 = False    for another_element in List2:        if element['important_key1'] == another_element['important_key1'] and element['important_key2'] == another_element['important_key2']:            final_List.append(another_element)            there_was_in_List2 = True            break    if not there_was_in_List2:        final_List.append(element)print(final_List)

是否有任何Pythonic方法可以做到这一点?

解决方法 您可以将List2转换为由List2中的重要键的值元组索引的dict,然后使用它来确定List1中的相同键是否具有与列表推导中的List1迭代相同的值,以便时间复杂性从你的O(n * m)减少到O(n):
keys = ['important_key1','important_key2']d2 = {tuple(d[k] for k in keys): d for d in List2[::-1]}print([d2.get(tuple(d[k] for k in keys),d) for d in List1])

这输出(带有您的样本输入):

[{‘hmmm’:’不’,’important_key1’:’AA’,’important_key2’:’3′},{‘哦!’:14,’important_key1’:’FF’,’important_key2’:’4′ },{‘sth_else’:’abc’,’important_key1’:’ZZ’,’important_key2’:’5′}]

正如您在问题中所描述的那样,List1中只有{‘sth’:13,’important_key2’:’3′}将替换为{‘hmmm’:’no’,’important_key1’: ‘AA’,’important_key2’:’3′}因为只有这个dict的important_key1和important_key2都匹配List2中的dict.

总结

以上是内存溢出为你收集整理的Python3如何通过唯一键连接两个dicts列表全部内容,希望文章能够帮你解决Python3如何通过唯一键连接两个dicts列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存