0

我有一个问题。解决方案可能是直截了当的,但我没有看到它。下面的代码返回一堆单独的字典,而不是一个大字典。然后我遍历这些小字典以提取值。问题是我宁愿通过一个大字典而不是一堆小字典来排序。“objFunctions.getAttributes”返回一个字典。“objFunctions.getRelationships”返回一个指针。

这是输出: {1:value} {2:value} {3:value}

这就是我想要的:{1:value,2:value,3:value}

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

2 回答 2

3

使用.update()方法来合并dicts:

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

请注意,如果一个键在不同的调用中重复,则最后.getAttributes存储的值attributes将是该键返回的最后一个值。

如果您不介意将您的值存储为列表;您必须手动将您的 dicts 与一个一个附加到 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)

现在,您的attributesdict 将包含每个键的列表,并将各种值收集在一起。您也可以使用 set,使用defaultdict(set)andattributes[key].add(value)代替。

于 2012-07-06T15:11:43.397 回答
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']})
于 2012-07-06T15:32:11.617 回答