在Python中,如何从字典中轻松检索已排序的项目?

时间:2008-09-10 20:05:25

标签: python sorting dictionary list

与列表不同的字典不是有序的(并且没有'sort'属性)。因此,首次添加时,您不能依赖于以相同顺序获取项目。

循环包含字符串作为键值的字典并按键按升序检索它们的最简单方法是什么?

例如,你有这个:

d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}

我想按以下顺序打印关键值:按键排序:

this is a
this is b
this is c

8 个答案:

答案 0 :(得分:17)

你的意思是你需要按键值排序的值吗? 在这种情况下,应该这样做:

for key in sorted(d):
    print d[key]

编辑:更改为使用已排序(d)而非排序(d.keys()),感谢Eli

答案 1 :(得分:16)

或更短,

for key, value in sorted(d.items()):
    print value

答案 2 :(得分:1)

这个代码片段会这样做。如果你经常这样做,你可能想要制作一个'sortkeys'方法,或者某些方法,以使眼睛更容易。

keys = list(d.keys())
keys.sort()
for key in keys:
    print d[key]

编辑:dF的解决方案更好 - 我忘了所有关于sorted()。

答案 3 :(得分:1)

>>> d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}
>>> for k,v in sorted(d.items()):
...     print v, k
... 
this is a a
this is b b
this is c c

答案 4 :(得分:1)

for key in sorted(d):
  print d[key]

答案 5 :(得分:1)

您还可以按值对字典进行排序并控制排序顺序:

import operator

d = {'b' : 'this is 3', 'a': 'this is 2' , 'c' : 'this is 1'}

for key, value in sorted(d.iteritems(), key=operator.itemgetter(1), reverse=True):
    print key, " ", value

输出:
b这是3
这是2
c这是1

答案 6 :(得分:0)

d = {'b' : 'this is b', 'a': 'this is a' , 'c' : 'this is c'}
ks = d.keys()
ks.sort()
for k in ks:
    print "this is " + k

答案 7 :(得分:0)

你的意思是“排序”而不是“有序”吗?看来你的问题的目的是排序字典,而不是订购字典。如果您的意思是“有序”,则可以使用集合模块中的OrderedDict。这些词典记住输入键/值对的顺序:

from collections import OrderedDict

参考信息:https://docs.python.org/2/library/collections.html#collections.OrderedDict