2017-09-26 125 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]}