将dict转换为OrderedDict

时间:2017-07-08 19:59:37

标签: python dictionary ordereddictionary

我有一个哈希表和一个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

1 个答案:

答案 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}

正如你所看到的,你生成的字典在排序方面与列表理解没有任何相似之处,因为生成的字典已经忘记了它的排序。