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

sds*_*sds 3 python dictionary list-comprehension

list与重复键有关联:

l = [(1, 2), (2, 3), (1, 3), (2, 4)]
Run Code Online (Sandbox Code Playgroud)

我想要一个dictlist值:

d = {1: [2, 3], 2: [3, 4]}
Run Code Online (Sandbox Code Playgroud)

我可以做得比:

for (x,y) in l:
  try:
    z = d[x]
  except KeyError:
    z = d[x] = list()
  z.append(y)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

您可以使用该dict.setdefault()方法为缺少的键提供默认的空列表:

for x, y in l:
    d.setdefault(x, []).append(y)
Run Code Online (Sandbox Code Playgroud)

或者您可以使用defaultdict()对象为缺少的键创建空列表:

from collections import defaultdict

d = defaultdict(list)
for x, y in l:
    d[x].append(y)
Run Code Online (Sandbox Code Playgroud)

但要关闭自动生存行为,您必须将default_factory属性设置为None:

d.default_factory = None  # switch off creating new lists
Run Code Online (Sandbox Code Playgroud)

  • 你如何设法在发布后查看我的问题_seconds_?:-) (4认同)
  • @sds它被称为*Ninja*愿景 (2认同)
  • @sds:我在[活跃的回答者如何找到要回答的问题?](http://meta.stackoverflow.com/a/254603)中写了我的方法 (2认同)

Bre*_*arn 5

您可以使用collections.defaultdict

d = collections.defaultdict(list)
for k, v in l:
    d[k].append(v)
Run Code Online (Sandbox Code Playgroud)