qua*_*cle 2 python dictionary tuples list
我得到的数据集格式化为键值对列表.关键是数据源,值是数据元素.例如:
[('a', 3), ('b', 5), ('a', 7), ('c', 15), ('d', 12)]
Run Code Online (Sandbox Code Playgroud)
我想把这个列表变成字典.我可以使用Python的内置功能dict(),但它会抛弃冗余值并仅保留与给定键关联的最后一个值.我想将冗余值放入列表中,如下所示:
{'a': [3, 7],
'b': [5],
'c': [15],
'd': [12]}
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法来做上述事情吗?我认为必须有,但我似乎无法通过谷歌找到正确的提示.
Sve*_*ach 14
您可以使用setdefault()词典的方法:
d = {}
for key, value in my_list:
d.setdefault(key, []).append(value)
Run Code Online (Sandbox Code Playgroud)
这也可以用a来完成defaultdict.这两个选项中哪一个更可取,取决于在d其余代码中使用的方式.A defaultdict永远不会给你一个KeyError,所以它可能会在代码中隐藏更多错误.
小智 7
在dict子类defaultdict中collections模块可用于自动初始化一个新的list每一个键上的第一次访问它.
有了它,您只需循环输入对并将每个值附加到list相应键的值,以生成所需的值列表.
import collections
data = [('a', 3), ('b', 5), ('a', 7), ('c', 15), ('d', 12)]
result = collections.defaultdict(list)
for key, value in data:
result[key].append(value)
print result
Run Code Online (Sandbox Code Playgroud)
defaultdict(<type 'list'>, {'a': [3, 7], 'c': [15], 'b': [5], 'd': [12]})
Run Code Online (Sandbox Code Playgroud)
print result['a']
Run Code Online (Sandbox Code Playgroud)
[3, 7]
Run Code Online (Sandbox Code Playgroud)
print result['z']
Run Code Online (Sandbox Code Playgroud)
[]
Run Code Online (Sandbox Code Playgroud)