在python中订购字典列表

时间:2015-08-12 06:08:24

标签: python dictionary

我正在尝试根据' 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'}]

2 个答案:

答案 0 :(得分:1)

您可以使用key将自定义sorted传递到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"]

答案 1 :(得分: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以确保它是整数比较而不是字符串比较。