2013-03-25 116 views
16

我试图通过键排序字典,但没有机会。 这是我的字典:Python:如何按键排序字典

result={'1':'value1','2':'value2',...} 

我使用Python2.7,我发现这个

keys = result.keys() 
keys.sort() 

但这不是我所期待的,我有​​一个未排序的字典。

回答

7

标准Python字典本质上是无序的。但是,您可以使用collections.OrderedDict。它保留插入顺序,因此,所有你需要做的就是添加键/值对所需的顺序:

In [4]: collections.OrderedDict(sorted(result.items())) 
Out[4]: OrderedDict([('1', 'value1'), ('2', 'value2')]) 
+1

如果if我有1000对夫妇(关键,价值)?? – Imoum 2013-03-25 12:56:06

+0

如果我必须按照“value *”的顺序对OrderedDict([('1','value1'),('2','value2')])'进行排序, – 2016-07-08 10:24:43

8
sorted(result.iteritems(), key=lambda key_value: key_value[0]) 

这将输出排序结果,但字典将保持未排序。如果你想保持字典的顺序,使用OrderedDict

其实,如果你排序你可以跳过key=...部分,因为那时的迭代项目是按值(什么NPE的使用首先由键后整理在他的回答中)

+0

我会亲自去'键=拉姆达(KEY,VAL):VAL)'这也是正确的,但恕我直言也更明确 – 2013-03-25 11:48:29

+1

@JonClements在python 3已弃用,所以目前的做法更好 – jamylak 2013-03-25 11:50:09

+0

@jamylak:为什么不推荐?任何参考? – 2013-03-25 11:51:19