从元素对列表创建字典

sar*_*912 1 python dictionary list

我想使用这个对列表创建一个字典:

pairs = [('a', 'c'), ('b', 'c'), ('b', 'e'), ('c', 'a'), ('c', 'b'), ('c', 'd'), ('c', 'e'), ('d', 'c'), ('e', 'c'), ('e', 'f')]
Run Code Online (Sandbox Code Playgroud)

我想返回这样的东西:

{ "a" : ["c"],
  "b" : ["c", "e"],
  "c" : ["a", "b", "d", "e"],
  "d" : ["c"],
  "e" : ["c", "f"],
  "f" : []}
Run Code Online (Sandbox Code Playgroud)

因此,基本上,该对中的每个元素都必须表示为键,即使它们有一个空列表。我尝试使用下面的代码:

graph = {}
for k, v in pairs:
  if k not in d:
    d[k] = []
  d[k].append(v) 
Run Code Online (Sandbox Code Playgroud)

但它仅返回该对中的第一个元素作为键:

{'a': ['c'],
 'b': ['c', 'e'],
 'c': ['a', 'b', 'd', 'e'],
 'd': ['c'],
 'e': ['c', 'f']} 
Run Code Online (Sandbox Code Playgroud)

And*_*ely 6

pairs = [('a', 'c'), ('b', 'c'), ('b', 'e'), ('c', 'a'), ('c', 'b'), ('c', 'd'), ('c', 'e'), ('d', 'c'), ('e', 'c'), ('e', 'f')]

d = {}
for k, v in pairs:
    d.setdefault(v, [])
    d.setdefault(k, []).append(v)

from pprint import pprint
pprint(d)
Run Code Online (Sandbox Code Playgroud)

印刷:

{'a': ['c'],
 'b': ['c', 'e'],
 'c': ['a', 'b', 'd', 'e'],
 'd': ['c'],
 'e': ['c', 'f'],
 'f': []}
Run Code Online (Sandbox Code Playgroud)