12

与列表不同的字典没有排序(并且没有“排序”属性)。因此,您不能依赖第一次添加时以相同的顺序获取项目。

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

例如,你有这个:

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

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

this is a
this is b
this is c
4

8 回答 8

17

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

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

编辑:更改为使用 sorted(d) 而不是 sorted(d.keys()),谢谢Eli

于 2008-09-10T20:10:05.687 回答
16

或者更短,

for key, value in sorted(d.items()):
    print value
于 2008-09-10T20:10:51.550 回答
1
for key in sorted(d):
  print d[key]
于 2008-09-11T09:34:47.153 回答
1

这个片段会这样做。如果您要经常这样做,您可能想要制作一个“排序键”方法或类似的方法,以使其更容易阅读。

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

编辑:dF 的解决方案更好——我忘记了 sorted()。

于 2008-09-10T20:08:48.933 回答
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
于 2008-09-10T20:11:55.073 回答
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
a 这是 2
c 这是 1

于 2008-09-12T15:11:00.007 回答
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
于 2008-09-10T20:12:48.173 回答
0

你的意思是“排序”而不是“有序”?看来您的问题旨在对字典进行排序,而不是对其进行排序。如果您的意思是“有序”,您可以使用集合模块中的 OrderedDict。这些字典会记住输入键/值对的顺序:

from collections import OrderedDict

参考资料:https ://docs.python.org/2/library/collections.html#collections.OrderedDict

于 2016-10-28T08:52:25.280 回答