📜  Python|使用另一个列表更新元组列表

📅  最后修改于: 2022-05-13 01:55:46.281000             🧑  作者: Mango

Python|使用另一个列表更新元组列表

给定两个元组列表,编写一个Python程序根据 'list2' 更新 'list1' 并返回一个更新后的列表。

例子:

Input : list1 = [('x', 0), ('y', 5)]
        list2 = [('x', 100), ('y', 200)]
Output : [('x', 100), ('y', 200)]

Input : list1 = [('a', 0), ('b', 0), ('c', 0)]
        list2 = [('a', 1), ('b', 2)]
Output :[('a', 1), ('b', 2), ('c', 0)]


方法#1 Pythonic Naive
这是一种 Pythonic 天真的方法。我们只需将元组列表转换为字典,然后使用list2更新它并将字典转换回列表。

# Python3 code to Update a list 
# of tuples according to another list
  
def merge(list1, list2): 
    dic = dict(list1)
    dic.update(dict(list2))
    return list(dic.items())
  
# Driver Code
list1 = [('a', 0), ('b', 0), ('c', 0)]
list2 = [('a', 5), ('c', 3)]
print(merge(list1, list2))
输出:
[('a', 5), ('b', 0), ('c', 3)]


方法 #2使用defaultdict
Python集合模块提供了在这种方法中使用的defaultdict()方法。首先,我们使用 defaultdict 方法将 'dic' 初始化为工厂传递列表。使用循环将每个元组的左元素附加为键,将每个元组的右元素附加为两个列表的值。现在只需使用 sorted函数并以这样的方式生成列表,即对于每个唯一键,它保持元组右元素的最大值。

# Python3 code to Update a list 
# of tuples according to another list
  
from collections import defaultdict
  
def merge(list1, list2): 
    dic = defaultdict(list)
    for i, j in list1 + list2:
        dic[i].append(j)
          
    return sorted([(i, max(j)) for i, j in dic.items()],
    key = lambda x:x[0])
  
# Driver Code
list1 = [('a', 0), ('b', 0), ('c', 0)]
list2 = [('a', 5), ('c', 3)]
print(merge(list1, list2))
输出:
[('a', 5), ('b', 0), ('c', 3)]