python:排序键:基于键的值对

时间:2015-09-11 00:56:09

标签: python

我有一本词典

    i={106:0.33,107:0.21,98:0.56}

我想根据键对键:值对进行排序。我期待输出看起来如下:

    {98:0.56, 106:0.33, 107:0.21}

当我使用它时:

    od = collections.OrderedDict(sorted(i.items()))
    print(od)

我输错了:

    [(98,0.56),(106,0.33),(107,0.21)]

任何人都可以帮我找到正确的代码吗?

1 个答案:

答案 0 :(得分:2)

OrderedDict会记住您将项目添加到词典中的顺序,而不是排序顺序。

但您可以轻松地从常规字典创建排序列表。例如:

>>> list1={106:0.33,107:0.21,98:0.56}
>>> sorted(list1.items())
[(98, 0.56), (106, 0.33), (107, 0.21)]

或者如果你想在OrderedDict中使用它,只需在排序后应用OrderedDict:

>>> from collections import OrderedDict
>>> 
>>> list1={106:0.33,107:0.21,98:0.56}
>>> OrderedDict(sorted(list1.items()))
OrderedDict([(98, 0.56), (106, 0.33), (107, 0.21)])

但是常规字典没有排序顺序的概念,所以你不能对字典本身进行排序。

但是,如果你真的想要那个显示,你可以创建自己的类:

>>> from collections import OrderedDict
>>> class MyDict(OrderedDict):
...     def __repr__(self):
...         return '{%s}' % ', '.join(str(x) for x in self.items())
... 
>>> list1={106:0.33,107:0.21,98:0.56}
>>> MyDict(sorted(list1.items()))
{(98, 0.56), (106, 0.33), (107, 0.21)}