Python 将两个元组列表合并为一个

Python 将两个元组列表合并为一个,python,Python,假设我们有两个列表,其中list1包含初始值,而列表2中有第一个列表中要更新的所有值: list1 = [('a', 0), ('b', 0), ('c', 0)] list2 = [('a', 5), ('c', 3)] 所需的结果是一个合并的list3,将list2值插入list1值中,使用第一个元素作为索引: list3 = [('a', 5), ('b', 0), ('c', 3)] 我尝试运行以下代码但未成功: list3 = list1 + list2 list3 = list

假设我们有两个列表,其中
list1
包含初始值,而列表2中有第一个列表中要更新的所有值:

list1 = [('a', 0), ('b', 0), ('c', 0)]
list2 = [('a', 5), ('c', 3)]
所需的结果是一个合并的list3,将list2值插入list1值中,使用第一个元素作为索引:

list3 = [('a', 5), ('b', 0), ('c', 3)]
我尝试运行以下代码但未成功:

list3 = list1 + list2 
list3 = list(zip(list1, list2)) 

通过使用dict,您可以这样实现:

list1 = [('a', 0), ('b', 0), ('c', 0)]
list2 = [('a', 5), ('c', 3)]
d1 = dict(list1)
d1.update(dict(list2))
list(d1.items())
>>> [('a', 5), ('b', 0), ('c', 3)]

您可以使用集合。defaultdict:

from collections import defaultdict
list1 = [('a', 0), ('b', 0), ('c', 0)]
list2 = [('a', 5), ('c', 3)]
d = defaultdict(list)
for a, b in list1+list2:
   d[a].append(b)

final_data = sorted([(a, max(b)) for a, b in d.items()], key=lambda x:x[0])
输出:

[('a', 5), ('b', 0), ('c', 3)]

逻辑是,如果两个列表的第一个值都相同,那么取第二个值最高的列表?是否添加第二个值?请解释一下@omri_saadon所提到的,将它们结合起来的具体规则是什么?列表2是否总是取代列表1?还是非零比零更重要?还是更高的价值获胜?或者什么?您需要解释为什么期望的结果包含
('b',0),('c',3)
,因为它不清楚。您既不是用“更高”的值覆盖元组,也不是用“第二个”的值覆盖元组,也不是用直观的东西覆盖元组…@colbalt011,它并没有真正告诉我们什么。
list2
只是覆盖了重复的
list1
吗?好的,听起来您想要的是
list2
中的值,以及
list1
中不在
list2
中的所有内容。你关心顺序吗?这是假设
list2
覆盖
list1
,我不确定这是OP的意图。这个解决方案解决了问题中所述的问题,但你是对的,OP不清楚,最后,@Ajax1234的解决方案是好的。就个人而言,我更喜欢这个解决方案,因为它更简单易读。它似乎也是如此(在Python3.6上)。