gpt4 book ai didi

list - 合并 2 个元组列表并在元组中添加非唯一值的 Pythonic 方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:20 24 4
gpt4 key购买 nike

我正在寻找重构以下 Python 代码的最佳方法。我认为有一种 Pythonic 的方法可以用 2 或 3 行代码来做到这一点,但无法弄清楚。我搜索了 Stackoverflow,但找不到类似的问题和解决方案。非常感谢!

list1 = [(Python, 5), (Ruby, 10), (Java, 15), (C++, 20)]
list2 = [(Python, 1), (Ruby, 2), (Java, 3), (PHP, 4), (Javascript, 5)]

# I want to make an unsorted list3 like this
# list3 = [(Python, 6), (Ruby, 12), (Java, 18), (PHP, 4), (Javasript, 5), (C++, 20)]
common_keys = list(set(dict(list1).keys()) & set(dict(list2).keys()))

if common_keys:
common_lst = [(x, (dict(list1)[x] + dict(list2)[x])) for x in common_keys]
rest_list1 = [(x, dict(list1)[x]) for x in dict(list1).keys() if x not in common_keys]
rest_list2 = [(x, dict(list2)[x]) for x in dict(list2).keys() if x not in common_keys]
list3 = common_lst + rest_list1 + rest_list2

else:
list3 = list1 + list2

最佳答案

您正在寻找 collections.defaultdict :

from collections import defaultdict
from itertools import chain

merged = defaultdict(int)

for key, value in chain(list1, list2):
merged[key] += value

如果你想要一个元组列表:

list3 = merged.items()

如果你想在没有chain的情况下做到这一点,你可以这样做:

from collections import defaultdict

merged = defaultdict(int)

merged.update(list1)

for key, value in list2:
merged[key] += value

编辑:正如 Beni 在评论中指出的那样,在 2.7/3.2+ 上,您可以:

from collections import Counter

merged = Counter(dict(list1))
merged.update(dict(list2))

这需要您将列表转换为 dict,但在其他方面是完美的。

关于list - 合并 2 个元组列表并在元组中添加非唯一值的 Pythonic 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7543944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com