将具有重复键的元组列表转换为列表字典
Convert a list of tuples with repeated keys to a dictionary of lists
我有一个关联 list
与重复键:
l = [(1, 2), (2, 3), (1, 3), (2, 4)]
我想要 dict
和 list
值:
d = {1: [2, 3], 2: [3, 4]}
我能做得更好吗:
for (x,y) in l:
try:
z = d[x]
except KeyError:
z = d[x] = list()
z.append(y)
您可以使用 dict.setdefault()
method 为缺少的键提供默认的空列表:
for x, y in l:
d.setdefault(x, []).append(y)
或者您可以使用 defaultdict()
object 为缺少的键创建空列表:
from collections import defaultdict
d = defaultdict(list)
for x, y in l:
d[x].append(y)
但要关闭自动激活行为,您必须将 default_factory
属性设置为 None
:
d.default_factory = None # switch off creating new lists
您可以使用 collections.defaultdict
:
d = collections.defaultdict(list)
for k, v in l:
d[k].append(v)
我有一个关联 list
与重复键:
l = [(1, 2), (2, 3), (1, 3), (2, 4)]
我想要 dict
和 list
值:
d = {1: [2, 3], 2: [3, 4]}
我能做得更好吗:
for (x,y) in l:
try:
z = d[x]
except KeyError:
z = d[x] = list()
z.append(y)
您可以使用 dict.setdefault()
method 为缺少的键提供默认的空列表:
for x, y in l:
d.setdefault(x, []).append(y)
或者您可以使用 defaultdict()
object 为缺少的键创建空列表:
from collections import defaultdict
d = defaultdict(list)
for x, y in l:
d[x].append(y)
但要关闭自动激活行为,您必须将 default_factory
属性设置为 None
:
d.default_factory = None # switch off creating new lists
您可以使用 collections.defaultdict
:
d = collections.defaultdict(list)
for k, v in l:
d[k].append(v)