簡體   English   中英

如何按鍵值和鍵值對字典列表進行排序?

[英]How to sort a list of dictionaries by the value of a key and by the value of a value of a key?

{
    "states": [
        {
            "timestamp": {
                "double": 968628281.0
            },
            "sensorSerialNumber": 13020235
        },
        {
            "timestamp": {
                "double": 964069109.0
            },
            "sensorSerialNumber": 13020203
        },
        {
            "timestamp": {
                "double": 9641066.0
            },
            "sensorSerialNumber": 30785
        }
    ]
}

有沒有一種方法可以通過“ sensorSerialNumber”和“ timestamp”(9.68628281E8)值中的此數字對字典列表進行排序,

"timestamp":{"double":9.68628281E8}

使用內置函數(已排序

from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name'))

但是,我的問題與其他問題略有不同 如果字典中沒有字典,則只需將第二個鍵的字符串添加到內置函數中,例如:

from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name', 'age'))

key可以是任何可調用key ,它依次傳遞給list_to_be_sorted中的每個元素。 因此, lambda將適合此處:

newlist = sorted(
    data['states'],
    key=lambda i: (i['sensorSerialNumber'], i['timestamp']['double']))

因此,lambda返回'sensorSerialNumber'鍵的值作為元組的第一個元素,並從'timestamp'鍵的字典值中返回'double'鍵的值。

演示:

>>> data = {"states" :
... [{"timestamp":{"double":9.68628281E8},"sensorSerialNumber":13020235},
... {"timestamp":{"double":9.64069109E8},"sensorSerialNumber":13020203},
... {"timestamp":{"double":9641066.0},"sensorSerialNumber":30785}]
... }
>>> sorted(data['states'], key=lambda i: (i['sensorSerialNumber'], i['timestamp']['double']))
[{'timestamp': {'double': 9641066.0}, 'sensorSerialNumber': 30785}, {'timestamp': {'double': 964069109.0}, 'sensorSerialNumber': 13020203}, {'timestamp': {'double': 968628281.0}, 'sensorSerialNumber': 13020235}]
>>> from pprint import pprint
>>> pprint(_)
[{'sensorSerialNumber': 30785, 'timestamp': {'double': 9641066.0}},
 {'sensorSerialNumber': 13020203, 'timestamp': {'double': 964069109.0}},
 {'sensorSerialNumber': 13020235, 'timestamp': {'double': 968628281.0}}]

該演示沒有那么有意義,因為沒有相等的序列號來包含時間戳記值以產生影響。

暫無
暫無

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

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