0

問題が発生しています。解決策は簡単かもしれませんが、私はそれを見ていません。以下のコードは、1つの大きな辞書ではなく、多数の個別の辞書を返します。次に、これらの小さな辞書を繰り返し処理して、値を引き出します。問題は、小さな辞書の束ではなく、1つの大きな辞書を並べ替えたいということです。「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()メソッドを使用して辞書をマージします。

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

キーが異なる呼び出しで繰り返される場合、最後に.getAttributes格納される値attributesは、そのキーに対して返される最後の値になることに注意してください。

値がリストとして保存されていることを気にしない場合。defaultdict に値を 1 つずつ追加して、dict を手動でマージする必要があります。

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辞書には各キーのリストが含まれ、さまざまな値がまとめられます。set を使用することもできますが、代わりにdefaultdict(set)andを使用しattributes[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 に答える