2012-07-06 80 views
0

我遇到問題。解決方案可能很簡單,但我沒有看到它。下面的代碼返回一堆個別字典,而不是一個大型字典。然後我通過這些小型字典來反覆提取價值。問題在於我寧願選擇一個大型字典,而不是一堆小字典。 「objFunctions.getAttributes」返回一個字典。 「objFunctions.getRelationships」返回一個指針。如何創建一個大字典而不是一堆小字

這是輸出: {1:值} {2:值} {3:值}

這是我想: {1:值,2:值,3:值}

for object in objList: 
    relationship = objFunctions.getRelationships(object) 
    for relPtr in relationships: 
     uglyDict = objFunctions.getAttributes(relPtr) 
+0

Python沒有指針。 – martineau 2012-07-06 16:44:57

回答

3

使用.update() method合併類型的字典:

attributes = {} 
for object in objList: 
    relationship = objFunctions.getRelationships(object) 
    for relPtr in relationships: 
     attributes.update(objFunctions.getAttributes(relPtr)) 

注意,如果一個鍵在不同的重複.getAttributes的職業,最後存儲在attributes中的值將是爲該密鑰返回的最後一個值。

如果您不介意將您的值存儲爲列表;你必須有附加逐一到defaultdict值手動合併您的類型的字典:

from collections import defaultdict 

attributes = defaultdict(list) 
for object in objList: 
    relationship = objFunctions.getRelationships(object) 
    for relPtr in relationships: 
     for key, value in objFunctions.getAttributes(relPtr): 
      attributes[key].append(value) 

現在你attributes字典將包含一個列表,每個按鍵,與一起收集的各種值。您也可以使用一套,使用defaultdict(set)attributes[key].add(value)來代替。

+0

沒錯。並且有重複的鍵和那些重複的鍵的值是不同的。我需要他們全部 – jellyDean 2012-07-06 15:16:57

+0

@ Dean0:字典需要唯一的鍵/值對。 – 2012-07-06 15:31:06

+0

你是對的。解決方案明顯我想我將不得不通過這些小字典進行迭代。我覺得有更好的辦法可以做到這一點。 Thankyou – jellyDean 2012-07-06 15:34:27

1
>>> from collections import defaultdict 
>>> x = defaultdict(list) 
>>> y = defaultdict(list) 
>>> x[1].append("value1") 
>>> x[2].append("value2") 
>>> y[1].append("value3") 
>>> y[2].append("value4") 
>>> for k in y: 
...  x[k].extend(y[k]) 
... 
>>> print x 
defaultdict(<type 'list'>, {1: ['value1', 'value3'], 2: ['value2', 'value4']}) 
相關問題