Python按索引排序

时间:2013-07-17 18:10:04

标签: python

让我们说有一本字典

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

我如何实现这一目标?

7 个答案:

答案 0 :(得分:11)

词典没有订单。如果您想这样做,您需要在原始列表中找到一些排序方法。或者,按照保存顺序将列保存在列表中,然后使用键作为键访问字典。

来自The Python Docs

  

最好将字典视为一组无序的键:值   对,要求密钥是唯一的(在一个内   字典)。

示例 -

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