2

この質問が既にここで検討されている場合は、事前にお詫び申し上げます。ここで別の回答を見ましたが、必要なものが見つかりませんでした。

私の目標は、このような辞書を作成することです -{'a':[10, 9, 10, 10], 'b':[10, 9, 1, 0], 'c':[0, 5, 0, 1], and so on}

私が持っているのは、重複したキーを持つ複数の辞書です(他のすべての辞書の同じキー)、このようなものです {'a':10, 'b': 0, 'c': 2} {'a':7, 'b': 4, 'c': 4} {'a':4, 'b': 5, 'c': 3}

そのような辞書の数、または「f」または「g」まで続くキーがあるかどうかを知る方法はありませんが、キーが重複していることはわかっています。試してみましdefaultdictたが、結果は--

defaultdict(<type 'list'>, {'a': [10]})
defaultdict(<type 'list'>, {'a': [10], 'b': [3]})
defaultdict(<type 'list'>, {'a': [10], 'b': [3], 'c': [0]})

そして、次の辞書についても同じこと -

defaultdict(<type 'list'>, {'a': [4]})
defaultdict(<type 'list'>, {'a': [4], 'b': [5]})
defaultdict(<type 'list'>, {'a': [4], 'b': [5], 'c': [1]})

上記の出力用に私が持っているコードは -

d = collections.defaultdict(list)
    for k, v in z.iteritems():
        d[k].append(v)
        c = d.items()
        print d

print c代わりに (を印刷するために) を実行するd.items()と、-

[('a', [10])]
[('a', [10]), ('b', [3])]
[('a', [10]), ('c', [0]), ('b', [3])]

これは、辞書ごとに繰り返されます。すべてのキー、値を保持する 1 つの dict を取得するにはどうすればよいですか -

{'a':[10,0,..], 'b':[4, 3, 4,..], etc.} ?

また、私が持っている辞書は for ループの結果であり、一意の変数に個別に保存されていないことも付け加えておく必要があります。

4

4 に答える 4

6

私があなたの注意を正しく理解していれば、あなたはさまざまな辞書をマージしようとしています。ビルトインを使用する 1 つの方法 (すぐに誰かが答えてくれると確信しています) は、次のようnumpyになります。collections

ds = [
    {'a':10, 'b': 0, 'c': 2},
    {'a':7, 'b': 4, 'c': 4},
    {'a':4, 'b': 5, 'c': 3} ]

merged = {}
for d in ds:
    for k, v in d.items ():
        if k not in merged: merged [k] = []
        merged [k].append (v)

print (merged)

(わかりやすくするためにかなり冗長です)

編集: 「必要な結果は値/キーのリストです。」というコメントを読んだ後、結果のマージされた辞書でこれを使用できます。

print ( [ (v, k) for k, v in merged.items () ] )

これにより、次の結果が得られます。

[([10, 7, 4], 'a'), ([2, 4, 3], 'c'), ([0, 4, 5], 'b')]
于 2013-09-16T19:23:31.637 に答える
2

これはあなたが必要とするものですか?

in_dicts = [{'a':10, 'b': 0, 'c': 2}, {'a':7, 'b': 4, 'c': 4}, {'a':4, 'b': 5, 'c': 3}]
out_dict = {}

for in_d in in_dicts:
  for k, v in in_d.iteritems():
    out_dict.setdefault(k, []).append(v)  
print out_dict

{'a': [10, 7, 4], 'c': [2, 4, 3], 'b': [0, 4, 5]}

于 2013-09-16T19:54:06.503 に答える
0

これについては、次の 1 つの考え方があります。

Python で辞書を指定すると、valueby にアクセスできますdictionary[key]。あなたの場合、辞書の値はリストです。

したがって、キーを取得する関数を考え出すことができます。キーが辞書に既に存在するかどうかを確認し、存在する場合は値を辞書に追加するだけです。例えば:

これがあなたの現在の辞書だとしましょう:

d = { 'a':[3, 17], 'b':[2, 4] }

解析するデータは次のとおりです。

data0 = { 'a':10, 'b':2, 'c':2 }

キーは'a'既に存在するため、値を取得してbydata0['a']に追加します。dd['a'].append(data0['a'])

これが役立つことをお知らせください / さらに説明が必要な場合は!

  • ミケバ
于 2013-09-16T19:16:26.783 に答える