我有一个字典定义如下:
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或包含键和值的元组列表,但是按绝对值排序?
答案 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))