[英]Convert a dictionary of dictionaries to dictionary of lists
我有一本字典:
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()))]
這給了我預期的結果,但我只是想知道這個操作是否有一些內置函數或者有更好的方法來做到這一點。
這個操作沒有內置函數,沒有。 我只是直接循環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]}
如果你喜歡字典和列表推導......
d1 = {"a": {"x": 1, "y": 2, "z": 3},
"b": {"x": 2, "y": 3, "z": 4},
"c": {"x": 3, "y": 4, "z": 5}}
dl1 = {kl: [v for di in d1.values() for k, v in di.items() if k == kl]
for di in d1.values() for kl in di.keys()}
print(dl1)
並產生預期的結果......
{'x': [1, 2, 3], 'y': [2, 3, 4], 'z': [3, 4, 5]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.