簡體   English   中英

Python詞典:更改嵌套順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM