[英]Python dictionaries: changing the order of nesting
我有一本具有300個鍵值對的字典,其中每個鍵都是整數,值是具有三個鍵值對的字典。 內部字典都具有相同的鍵,但值不同。 整個過程看起來像這樣:
nested_dicts =
{1: {'name1':88.4,
'name2':22.1,
'name3':115.7},
2: {'name1':89.4,
'name2':23.7,
'name3':117.9}
...
300:{'name1':110.1,
'name2':36.6,
'name3':122.4}
}
如果從上面的數據結構示例不清楚,則此嵌套字典可能應如下所示:
better_dict =
{'name1': [88.4, 89.4, ..., 110.1],
'name2': [22.1, 23.7, ..., 36.6],
'name3': [115.7, 117.9, ..., 122.4]}
所以,我想做一個從nested_dicts到Better_dict的轉換。
我很難做到這一點。 我已經接近了,但是我的麻煩來自於試圖弄清楚如何確保結果列表的順序正確。 也就是說,列表中值的順序應與原始nested_dict的外部詞典中的鍵相對應。 另外,我的代碼使用for循環,但是我覺得這是生成器/列表推導的自然應用。 任何幫助,將不勝感激。
將輸入字典調整為:
>>> nested_dicts
{0: {'name2': 22.1, 'name3': 115.7, 'name1': 88.4},
1: {'name2': 23.7, 'name3': 117.9, 'name1': 89.4},
2: {'name2': 36.6, 'name3': 122.4, 'name1': 110.1}}
>>> for i in sorted(nested_dicts):
for k, v in nested_dicts[i].items():
if k not in n:
n[k] = [None] * len(nested_dicts)
n[k][i] = v
>>> n
defaultdict(<class 'list'>, {'name2': [22.1, 23.7, 36.6],
'name3': [115.7, 117.9, 122.4], 'name1': [88.4, 89.4, 110.1]})
我必須指出,鑒於鍵的限制,您的原始結構只需要列出字典即可。
預計到達時間:您要保留鍵順序的請求將需要在原始的nested_dict
適當的索引。 那就是需要一個從0開始的連續序列。
在python2.7 +中
{n:[nested_dicts[i][n] for i in range(1,301)] for n in ["name1","name2","name3"]}
對於python2.6
dict((n, [nested_dicts[i][n] for i in range(1,301)]) for n in ["name1","name2","name3"])
請注意,列表中的位置是從0而不是1開始的索引
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.