2014-04-21 52 views
1

我正在尋找轉移python的字典,並在環顧四周後,我無法爲此找到解決方案。有誰知道我怎麼能扭轉像下面輸入字典:python reverse/transponse a dictionary

graph = {'A': ['B', 'C'], 
      'B': ['C', 'D'], 
      'C': ['D'], 
      'D': ['C'], 
      'E': ['F'], 
      'F': ['C']} 

,使我得到的東西,如:

newgraph = {'A': [''], 
     'B': ['A'], 
     'C': ['A', 'B', 'D','F'], 
     'D': ['B', 'C'], 
     'E': [''], 
     'F': ['E']} 
+0

爲什麼爲F從結果對於C失蹤? –

+0

對不起,這是一個錯字!將更新 – user3291939

+1

爲什麼F從C和E的結果中缺少結果'F'? – shaktimaan

回答

2

使用defaultdict

newgraph = defaultdict(list) 
for x, adj in graph.items(): 
    for y in adj: 
     newgraph[y].append(x) 

雖然空字符串似乎沒有任何意義在空列表0,這當然可能:

for x in newgraph: 
    newgraph[x] = newgraph[x] or [''] 
0

使用defaultdict

>>> from collections import defaultdict 
>>> graph = {'A': ['B', 'C'], 
...    'B': ['C', 'D'], 
...    'C': ['D'], 
...    'D': ['C'], 
...    'E': ['F'], 
...    'F': ['C']} 
>>> new_graph = defaultdict(list) 
>>> for ele in graph.keys(): 
...  new_graph[ele] = [] 
... 
>>> for k, v in graph.items(): 
...  for ele in v: 
...    new_graph[ele].append(k) 
... 
>>> pprint(new_graph) 
{'A': [], 
'B': ['A'], 
'C': ['A', 'B', 'D', 'F'], 
'D': ['B', 'C'], 
'E': [], 
'F': ['E']} 
+0

OP指定'A'應映射到包含空字符串的列表(''A':['']')。你的答案更有意義,因爲如果你請求'new_graph ['A']'你會得到一個空列表,這是一個更好的表示沒有值。我想知道插入空列表是否有意義,因爲defaultdict會根據需要創建它們。 –

+0

我剛剛解決了這個問題。 :) – shaktimaan

+0

您是如何設法在打印時獲得該訂單的?出於某種原因,我得到了>>> ['A','B','E','D','F','M'] – user3291939

0

也有可能不defaultdict。 在這裏,我已經在新字典中留下了無值的空鍵。

graph = {'A': ['B', 'C'], 
      'B': ['C', 'D'], 
      'C': ['D'], 
      'D': ['C'], 
      'E': ['F'], 
      'F': ['C']} 

g = dict.fromkeys(graph.keys()) 
for k, v in graph.iteritems(): 
    for x in v: 
    if g[x]: g[x] += [k] 
    else: g[x] = [k] 

for k in sorted(graph.keys()): 
    print k, ':', g[k] 

輸出:

A : None 
B : ['A'] 
C : ['A', 'B', 'D', 'F'] 
D : ['C', 'B'] 
E : None 
F : ['E']