2012-07-06 43 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']}) 
相关问题