Python - 按绝对值排序字典

时间:2017-10-11 03:49:26

标签: python sorting dictionary

我有一个字典定义如下:

dict: {'KEY1': Decimal('-6.20000'), 'KEY2': Decimal('-2.58000'), 'KEY3': Decimal('6.80000')}

我想要一个按绝对值排序的键/值对的列表或OrderedDict。

我试过了:

sorted_dict = sorted(mydict, key=lambda k: abs(mydict[k]), reverse=True)

但是这只返回一个键列表,没有相应的值,尽管它们似乎按绝对值排序。

如何获取OrderedDict或包含键和值的元组列表,但是按绝对值排序?

2 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。使用.items并将生成的元组对传递给OrderedDict构造函数。

from collections import OrderedDict

values = {
    'KEY1': Decimal('-6.20000'),
    'KEY2': Decimal('-2.58000'),
    'KEY3': Decimal('6.80000')
}

sorted_pairs = sorted(values.items(), key=lambda k: abs(k[1]), reverse=True)
ordered_dict = OrderedDict(sorted_pairs)

答案 1 :(得分:1)

您只需要一个从字典.items() View中接收(键,值)元组的键函数,并返回该值的绝对值。例如:

from decimal import Decimal
from collections import OrderedDict

data = {'KEY1': Decimal('-6.20000'), 'KEY2': Decimal('-2.58000'), 'KEY3': Decimal('6.80000')} 
out = OrderedDict(sorted(data.items(), key=lambda t: abs(t[1])))
print(out)

<强>输出

OrderedDict([('KEY2', Decimal('-2.58000')), ('KEY1', Decimal('-6.20000')), ('KEY3', Decimal('6.80000'))])

如果我们使用适当的def函数作为关键函数,它会更容易阅读:

def keyfunc(t):
    return abs(t[1])

out = OrderedDict(sorted(data.items(), key=keyfunc))