我有一个哈希表和一个lambda用于这样排序:
h = {"hlllleleo": 9, "hello": 5, "fgfgggf" : 7, "abcdefgh": 8}
lbda = lambda x : h[x]
from collections import OrderedDict as od
od({x:h[x] for x in sorted(h, key=lbda)})
#Outputs:
OrderedDict([('abcdefgh', 8), ('hlllleleo', 9), ('fgfgggf', 7),
('hello', 5)])
为什么订购的字典不会按照构建的方式排序?如果我循环遍历sorted(),它将被排序:
for x in sorted(h, key=lbda):
print x, h[x]
# Outputs:
hello 5
fgfgggf 7
abcdefgh 8
hlllleleo 9
答案 0 :(得分:3)
原因很简单。您可以按键对字典进行排序,并使用理解创建新的字典。但是,在创建字典并将其传递给OrderedDict
构造函数进行创建时,它已经忘记了订单。
让我们将您的词典理解转换为列表理解:
In [413]: [(x, h[x]) for x in sorted(h, key=lambda x : h[x])]
Out[413]: [('hello', 5), ('fgfgggf', 7), ('abcdefgh', 8), ('hlllleleo', 9)]
现在,与字典相同:
In [414]: {x : h[x] for x in sorted(h, key=lambda x : h[x])}
Out[414]: {'abcdefgh': 8, 'fgfgggf': 7, 'hello': 5, 'hlllleleo': 9}
正如你所看到的,你生成的字典在排序方面与列表理解没有任何相似之处,因为生成的字典已经忘记了它的排序。