如何创建一个大字典而不是一堆小字
问题描述:
我遇到问题。解决方案可能很简单,但我没有看到它。下面的代码返回一堆个别字典,而不是一个大型字典。然后我通过这些小型字典来反复提取价值。问题在于我宁愿选择一个大型字典,而不是一堆小字典。 “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)
答
使用.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)
来代替。
答
>>> 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']})
Python没有指针。 – martineau 2012-07-06 16:44:57