2015-08-12 3 views
2

Я пытаюсь сортировать этот список словаря на основе нисходящих значений 'datetime' i.e от 1438887240 до 1438887255. Мне нужно сохранить результат в другом списке словаря с этим отсортированным результатом. Я новичок в python и пытаюсь реализовать этот критерий. Любая помощь высоко ценится.Закажите список словарей в 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'}] 
+0

@mu 無 Большое спасибо за ваши данные! помогли и многому научились – SuraJ

ответ

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 s не гарантированы, чтобы иметь ключ "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 для sorted.Also преобразовать в int, чтобы убедиться, что это целое сравнение, а не сравнение строк.

+0

@suraj ответ, который вы выберете, не даст правильного вывода. Если у вас есть значения, такие как '123' и' 4', он даст '123' меньше, чем' 4', так как это «сравнение строк» ​​и а не «целочисленное сравнение». – vks

Смежные вопросы