2017-09-26 21 views
2

の辞書に辞書の辞書を変換します私は辞書の辞書持っているリスト

d = {"a": {"x":1, "y":2, "z":3}, "b": {"x":2, "y":3, "z":4}, "c": {"x":3, "y":4, "z":5}} 

をそして、私はそれを変換したい:要件はnew_d[key][i]new_d[another_key][i]があるべきであるということである

new_d = {"x":[1, 2, 3], "y": [2, 3, 4], "z": [3, 4, 5]} 

dの同じサブディクショナリにあります。これは私が期待したものを私に与えますが、いくつかの組み込み関数は、この操作のためにそこにあるか、それを行うには良い方法がある場合、私はちょうど疑問に思って

for key in d.values()[0].keys(): 
    new_d[key] = [d.values()[i][key] for i in range(len(d.values()))] 

は、だから私は、その後 new_d = {}とを作成しました。

答えて

4

この操作のための組み込み関数はありません。

new_d = {} 
for sub in d.itervalues():    # Python 3: use d.values() 
    for key, value in sub.iteritems(): # Python 3: use d.items() 
     new_d.setdefault(key, []).append(value) 

これはdict.values()コールたびに新しいリストを作成回避:私は直接valuesオーバーちょうどループと思います。

辞書には順序がありません。しかし、結果のリストの値はあなたの基準に合っています。 new_dの各キーで同じ順序で追加されます。

>>> d = {"a": {"x":1, "y":2, "z":3}, "b": {"x":2, "y":3, "z":4}, "c": {"x":3, "y":4, "z":5}} 
>>> new_d = {} 
>>> for sub in d.values(): 
...  for key, value in sub.items(): 
...   new_d.setdefault(key, []).append(value) 
... 
>>> new_d 
{'x': [1, 2, 3], 'y': [2, 3, 4], 'z': [3, 4, 5]} 
関連する問題