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

时间:2015-02-03 19:14:43

标签: python dictionary list-comprehension

我有一个带有重复键的关联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)

2 个答案:

答案 0 :(得分:8)

您可以使用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

答案 1 :(得分:4)

您可以使用collections.defaultdict

d = collections.defaultdict(list)
for k, v in l:
    d[k].append(v)