将具有重复键的元组列表转换为列表字典

Convert a list of tuples with repeated keys to a dictionary of lists

我有一个关联 list 与重复键:

l = [(1, 2), (2, 3), (1, 3), (2, 4)]

我想要 dictlist 值:

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)