让我们说有一本字典
foo = {'b': 1, 'c':2, 'a':3 }
我想按照字典中项目外观的顺序迭代这个字典。
for k,v in foo.items():
print k, v
打印
a 3
c 2
b 1
如果我们使用sorted()函数:
for k,v in sorted(foo.items()):
print k, v
打印
a 3
b 1
c 2
但是我需要它们按照它们出现在字典中的顺序i; e
b 1
c 2
a 3
我如何实现这一目标?
答案 0 :(得分:11)
词典没有订单。如果您想这样做,您需要在原始列表中找到一些排序方法。或者,按照保存顺序将列保存在列表中,然后使用键作为键访问字典。
最好将字典视为一组无序的键:值 对,要求密钥是唯一的(在一个内 字典)。
示例 -
>>> testList = ['a', 'c', 'b']
>>> testDict = {'a' : 1, 'c' : 2, 'b' : 3}
>>> for elem in testList:
print elem, testDict[elem]
a 1
c 2
b 3
或者更好,请使用OrderedDict
-
>>> from collections import OrderedDict
>>> testDict = OrderedDict([('a', 1), ('c', 2), ('b', 3)])
>>> for key, value in testDict.items():
print key, value
a 1
c 2
b 3
答案 1 :(得分:2)
必须使用ordered dictionary来记住它们存储在
中的顺序>>>from collections import OrderedDict
>>>od = OrderedDict()
>>>od['b'] = 1
>>>od['c'] = 2
>>>od['a'] = 3
>>>print od
OrderedDict([('b',1), ('c',2), ('a',3)]
答案 2 :(得分:2)
也许这个?
sorted(foo, key=foo.get)
答案 3 :(得分:2)
如果你想多次使用你的OrderedDict,请像人们所说的那样使用OrderedDict。 :)如果您只想要一次性的单行,请更改您的排序功能:
sorted(foo.items(), lambda a,b:a[1]-b[1])
答案 4 :(得分:2)
你可以通过单行代码来实现:
>>> sorted(foo.items(), key=lambda x: x[1])
[('b', 1), ('c', 2), ('a', 3)]
答案 5 :(得分:1)
如果您只想按键进行排序,请执行以下操作:
sorted_by_keys_dict = dict((y,x) for x,y in foo.iteritems())
for k,v in sorted(sorted_by_keys_dict.items()):
print v, k
a 1
c 2
b 3
或简单地说:
for k,v in sorted(dict((y,x) for x,y in foo.iteritems()).items()):
print v, k
a 1
c 2
b 3
答案 6 :(得分:1)
更直接地看到这一点,你用来创建dict的顺序不是dict的顺序。订单是不确定的。
>>> {'b': 1, 'c':2, 'a':3 }
{'a': 3, 'c': 2, 'b': 1}