2017-09-26 127 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 = {"x":[1, 2, 3], "y": [2, 3, 4], "z": [3, 4, 5]} 

的要求是:new_d[key][i]new_d[another_key][i]應在d的同一子字典中。

因此,我創建new_d = {}然後:

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

這給我我所期待的,但如果有一些內置的功能,此操作或者有更好的方法來做到這一點,我只是想知道。

回答

4

此操作沒有內置功能,沒有。我只是遍歷values直接

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()調用一個新的列表。

請注意,字典沒有順序。然而,結果列表中的值將符合您的標準;他們將按照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]}