在Python中对字典列表进行排序

3
我想按照'datetime'值的降序对字典列表进行排序,即从14388872401438887255。我需要将结果存储到另一个字典列表中并排序。我是Python新手,正在尝试实现此标准。非常感谢任何帮助。
res = [{'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '5.0',   'cpucore_00': '0.399414', 'datetime': '1438887255'}, 
  {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '9.375', 'cpucore_00': '1.597656', 'datetime': '1438887250'}, 
  {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '3.195312', 'cpucore_00': '0.0', 'datetime': '1438887240'}, 
  {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '5.59375', 'cpucore_00': '1.0', 'datetime': '1438887245'}]

@mu無 非常感谢你的意见!我从中得到了很多帮助和学习。 - Goutam
2个回答

2

您可以使用自定义的 key 参数同时传入 reverse=True 以得到按降序排列的结果:

>>> res = [{'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '5.0',   'cpucore_00': '0.399414', 'datetime': '1438887255'}, 
...   {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '9.375', 'cpucore_00': '1.597656', 'datetime': '1438887250'}, 
...   {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '3.195312', 'cpucore_00': '0.0', 'datetime': '1438887240'}, 
...   {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '5.59375', 'cpucore_00': '1.0', 'datetime': '1438887245'}]
>>> sorted(res, key=lambda x: x["datetime"], reverse=True)
[{'cpucore_00': '0.399414',
  'cpucore_sum': '5.0',
  'cpunumber': '40.0',
  'datetime': '1438887255',
  'servername': 'f02wn01'},
 {'cpucore_00': '1.597656',
  'cpucore_sum': '9.375',
  'cpunumber': '40.0',
  'datetime': '1438887250',
  'servername': 'f02wn01'},
 {'cpucore_00': '1.0',
  'cpucore_sum': '5.59375',
  'cpunumber': '40.0',
  'datetime': '1438887245',
  'servername': 'f02wn01'},
 {'cpucore_00': '0.0',
  'cpucore_sum': '3.195312',
  'cpunumber': '40.0',
  'datetime': '1438887240',
  'servername': 'f02wn01'}]

你也可以使用列表的.sort方法对其进行原地排序(使用reverse=True进行降序排列):
>>> res.sort(key=lambda x: x["datetime"])
>>> res
[{'cpucore_sum': '3.195312', 'cpucore_00': '0.0', 'servername': 'f02wn01', 'cpunumber': '40.0', 'datetime': '1438887240'}, {'cpucore_sum': '5.59375', 'cpucore_00': '1.0', 'servername': 'f02wn01', 'cpunumber': '40.0', 'datetime': '1438887245'}, {'cpucore_sum': '9.375', 'cpucore_00': '1.597656', 'servername': 'f02wn01', 'cpunumber': '40.0', 'datetime': '1438887250'}, {'cpucore_sum': '5.0', 'cpucore_00': '0.399414', 'servername': 'f02wn01', 'cpunumber': '40.0', 'datetime': '1438887255'}]

如果您的所有dict都不能保证有"datetime"键,那么您可以使用x.get("datetime")代替x["datetime"]


0
x = [{'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '5.0',        'cpucore_00': '0.399414', 'datetime': '1438887255'},
   {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '9.375',      'cpucore_00': '1.597656', 'datetime': '1438887250'},
   {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum':     '3.195312', 'cpucore_00': '0.0', 'datetime': '1438887240'},
  {'cpunumber': '40.0', 'servername': 'f02wn01', 'cpucore_sum': '5.59375', 'cpucore_00': '1.0', 'datetime': '1438887245'}]

y=sorted(x,key=lambda z:int(z.get("datetime")))

您可以使用lambda函数作为key来进行排序。同时,将其转换为int以确保进行整数比较而不是字符串比较。


@suraj你选择的答案不会给出正确的输出。如果你有像1234这样的值,它将会把123作为小于4的结果,因为这是字符串比较而不是整数比较 - vks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接