簡體   English   中英

按標簽對嵌套的python字典進行排序

[英]Sorting nested python dictionary by label

我正在嘗試找到一種通過std對以下數據結構進行排序的聰明方法:

{'4555':{'std':5656, 'var': 5664}, '5667':{'std':5656, 'var': 5664}}

理想情況下,我喜歡有一個排序的字典(我知道不好)或一個排序的元組列表,但是我不知道如何在我的lambda表達式中獲得'std'部分。 我正在嘗試以下操作,但是如何以一種聰明的方式掌握“ stdev”呢? 我想給出一個元組列表(每個元組包含諸如[(4555, 5656), (5667, 5656)]索引。

sorted_list = sorted(sd_dict.items(), key=lambda x:x['std'])

由於sd_dict.items()返回一個元組列表,因此您不再可以像訪問key函數中的字典一樣訪問元素。 相反, key函數獲得一個由兩個元素組成的元組,第一個元素是鍵,第二個元素是值。 因此,要獲取std值,您需要像這樣訪問它:

lambda x: x[1]['std']

但是由於在您的示例中這兩個值是相同的,因此您實際上無需進行任何更改:

>>> list(sorted(sd_dict.items(), key=lambda x: x[1]['std']))
[('5667', {'var': 5664, 'std': 5656}), ('4555', {'var': 5664, 'std': 5656})]

而且,如果您只想要一對外部字典鍵和std值,則應首先使用列表推導來轉換字典值:

>>> lst = [(key, value['std']) for key, value in sd_dict.items()]
>>> lst.sort(key=lambda x: x[1])
>>> lst
[('5667', 5656), ('4555', 5656)]

或者,也許您想包含一個int轉換,並且還按鍵排序:

>>> lst = [(int(key), value['std']) for key, value in sd_dict.items()]
>>> lst.sort(key=lambda x: (x[1], x[0]))
>>> lst
[(4555, 5656), (5667, 5656)]

輸入列表中的每個元素都是(k, dictionary)項的元組,因此您需要索引到其中以獲取字典值中的std鍵:

sorted(sd_dict.items(), key=lambda i: i[1]['std'])

如果需要字典中的鍵和std值的元組,則需要選擇它們; 排序之前還是之后都沒關系,只需相應地調整排序鍵即可

sorted([(int(k), v['std']) for k, v in sd_dict.items()], key=lambda i: i[1])

要么

[(int(k), v['std']) for k, v in sorted(sd_dict.items()], key=lambda i: i[1]['std'])

但是,只提取一次std值而不是同時進行排序和提取都將更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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