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

问题描述 投票:3回答:2

我有一个协会 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)
python dictionary list-comprehension
2个回答
8
投票

你可以使用 dict.setdefault() 办法 为丢失的键提供一个默认的空列表。

for x, y in l:
    d.setdefault(x, []).append(y)

或者你可以使用一个 defaultdict() 对象 来为丢失的键创建空列表。

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

4
投票

您可以使用 collections.defaultdict:

d = collections.defaultdict(list)
for k, v in l:
    d[k].append(v)
© www.soinside.com 2019 - 2024. All rights reserved.