{
"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
可以是任何可调用的,它依次传递给 list_to_be_sorted
中的每个元素。所以 lambda 适合这里:
newlist = sorted(
data['states'],
key=lambda i: (i['sensorSerialNumber'], i['timestamp']['double']))
因此 lambda 返回 'sensorSerialNumber'
键的值作为元组的第一个元素,以及来自字典值的 'double'
键的值对于 'timestamp'
键。
演示:
>>> 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}}]
该演示没有多大意义,因为没有相同的序列号可以包含时间戳值来产生差异。
关于python - 如何按键的值和键的值的值对字典列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39905925/