簡體   English   中英

根據多個字典列表的鍵對數據進行排序

[英]Sort data based on key of a list of multiple dictionaries

我有這樣的清單

li = [
    {1: {'amount': 255, 'date': '25-02-2017'}},
    {2: {'amount': 25, 'date': '2-02-2017'}},
    {3: {'amount': 38, 'date': '20-02-2017'}},
]

我試圖基於'amount'來對數據進行升序和降序排序。

我嘗試了以下操作,但無法獲得想要的結果:

import operator
li.sort(key=operator.itemgetter('amount'))

from operator import itemgetter
newlist = sorted(li, key=itemgetter('amount'))

兩者都引發異常KeyError: 'amount'

您有一個帶有單個鍵的字典列表,其值是另一個字典。 那個嵌套字典具有鍵'amount'

您必須達到並獲得該單一價值:

newlist = sorted(li, key=lambda d: d.values()[0]['amount'])

這僅在Python 2中有效,其中d.values()是列表。 在Python 3中,您必須使用next(iter(d.values())['amount']

你一定會覺得很沒有產生嵌套結構在所有的更好。 將那些編號的鍵移動到另一個鍵值對中:

li = [
    {'id': 1', amount': 255, 'date': '25-02-2017'},
    {'id': 2, 'amount': 25, 'date': '2-02-2017'},
    {'id': 3, 'amount': 38, 'date': '20-02-2017'},
]

在這一點上,您最初的嘗試會奏效。 您可以使用[dict(id=d.keys()[0], **d.values()[0]) for d in li]轉換當前數據結構,但最好修復產生的代碼名單。

請嘗試以下使用lambda的代碼,

li=[{1:{'amount':255,'date':'25-02-2017'}},{2:{'amount':25,'date':'2-02-2017'}},{3:{'amount':38,'date':'20-02-2017'}}] 
print(li)

li.sort(key=lambda x:list(x.values())[0]['amount']) # ascending
print(li)

li.sort(key=lambda x:list(x.values())[0]['amount'],reverse=True) # descending
print(li)

暫無
暫無

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

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