簡體   English   中英

Python-按字典中元組中的某個元素對列表進行排序

[英]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副本。

您應該考慮的其他幾件事;

  1. 如果您的詞典沒有info作為密鑰怎么辦?
  2. 如果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.

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