[英]Python - Sort a list by a certain element in a tuple in a dictionary
data = [{'info': ('orange', 400000, 'apple'), 'photo': None}, {'info': ('grape', 485000, 'watermelon'), 'photo': None}]
我想按字典中元組中的第二個元素(400000,485000)對data
進行排序。 我該怎么做呢?
我遵循了另一個答案,最接近的嘗試是data.sort(key=lambda tup: tup[1])
,但這會產生此錯誤:
KeyError:1
將list.sort
方法與首先對info
索引, 然后對元組中的數據索引的key
一起使用:
data.sort(key=lambda x: x['info'][1])
或者, 不是就地sorted
函數:
data = sorted(data, key=lambda x: x['info'][1])
在這兩者之間, list.sort
更快,因為它可以對數據進行就地sorted
,而sorted
必須創建並返回data中的data
副本。
您應該考慮的其他幾件事;
info
作為密鑰怎么辦? info
元組中的第二個元素甚至不是數字怎么辦? 您是否希望sort
在遇到無效數據時出錯? 還是您寧願介紹一些根據具體情況進行處理的方法? key
將需要相應地更改。
您可以通過key
進行排序:
data = [{'info': ('orange', 400000, 'apple'), 'photo': None}, {'info': ('grape', 485000, 'watermelon'), 'photo': None}]
new_data = sorted(data, key=lambda x:x.get('info', [0, 0])[1])
對於要排序的列表中的每個dict項,您都希望采用以'info'鍵為列表的項的值,然后對第二個項(地址為[1],從零開始計數)進行排序。
因此: data.sort(key=lambda item: item['info'][1])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.