python - 如何避免在 Python 中两次查找字典以获取/设置键值?

标签 python dictionary group-by key aggregate

我有一个 list :

lst = [('a', 1), ('b', 2), ('c', 3), ('a', 4), ('c', 5)]

我想按元组的第一个元素分组并附加第二个元素:
group = {'a': [1, 4], 'b': [2], 'c': [3, 5]}

所以我的代码是这样的:
group = dict()
for e1, e2 in lst:
    if e1 in group:
        group[e1].append(e2)
    else:
        group[e1] = [e2]

我不喜欢这段代码的地方是我在组字典中查找键两次,一次用于命令 e1 in group两个用于命令 group[e1] = ...
如果找到键并且不必再次查看以设置此键的值,是否有更好的方法来保留“指针”?
另外,如果使用库有更好的解决方案,请告诉我。

最佳答案

您可以使用 defaultdict .

from collections import defaultdict
lst = [('a', 1), ('b', 2), ('c', 3), ('a', 4), ('c', 5)]
group=defaultdict(list)

for k,v in lst:
    group[k].append(v)

group
# defaultdict(list, {'a': [1, 4], 'b': [2], 'c': [3, 5]})

关于python - 如何避免在 Python 中两次查找字典以获取/设置键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60614950/

相关文章:

python - 根据变量值查找数据框中的最大值

python - 如何在Python中将字符串添加到字典的Key中?

c# - C# 中值是匿名类型的字典

c# - LINQ 按不同输出分组

python - 是否有 Google Insights API?

python - Cython 比 Numpy 慢(来自 Python Cookbook 的示例)

python - 为什么我得到这个 NameError : name 'url_for' is not defined?

c# - 枚举和字典<枚举, Action >

python - 对列表的列表进行分组,并计算唯一的第一个元素的第二个元素的出现次数

mysql - 将多行合并为一行