python:迭代按键排序的字典

use*_*003 54 python sorting dictionary

我有一本Python字典

steps = {1:"value1", 5:"value2", 2:"value3"}
Run Code Online (Sandbox Code Playgroud)

我需要通过密钥迭代这个排序顺序.

我试过这个:

x = sorted(steps, key=lambda key: steps[key])
Run Code Online (Sandbox Code Playgroud)

但价值从x消失了.

Dmi*_*kin 89

我需要通过密钥迭代这个排序顺序.

我认为lambdas这里有点矫枉过正,试试这个:

>>> steps = {1:"val1", 5:"val2", 2:"val3"}
>>>
>>> for key in sorted(steps):
...     print steps[key]
...
val1
val3
val2
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是一个非常古老的帖子,但我偶然发现了这个搜索其他内容并且我想注意:`for key,sort in sorted(steps):print value`明显快于`for sorted in sorted(steps):打印步骤[键]` (11认同)
  • @DaveLeBlanc:对于答案`for key,sorted in sorted(steps)中定义的步骤:print value`给出`TypeError:'int'对象不可迭代` - 你的意思是`for key,value in sorted(steps.iteritems) ()):打印值`? (5认同)
  • Python 3:`for key,sorted in sorted(steps.items()):`. (5认同)
  • 如果键是一个字符串,但我需要将它作为一个int排序怎么办? (2认同)

Ash*_*ary 17

你需要迭代steps.items(),因为在dict上的迭代只返回它的键.

>>> x = sorted(steps.items())
>>> x
[(1, 'value1'), (2, 'value3'), (5, 'value2')]
Run Code Online (Sandbox Code Playgroud)

迭代排序的键:

>>> for key in sorted(steps):
...     # use steps[keys] to get the value
Run Code Online (Sandbox Code Playgroud)


Gra*_*ntJ 6

您还可以使用Python的许多SortedDict容器类型之一.这些类型自动维护按键顺序排序的字典.看看sortedcontainers模块,它是纯Python和快速C实现.有一个性能比较,它将几个其他实现相互比较.

在你的情况下,你使用:

from sortedcontainers import SortedDict
steps = SortedDict({1:"value1", 5:"value2", 2:"value3"})

# Then iterate the items:

for key, value in steps.items():
    print key, value

# Or iterate the values:

for value in steps.values():
    print value
Run Code Online (Sandbox Code Playgroud)

键/值/项的迭代按排序键顺序自动进行.


Dav*_*han 5

如果您的键不是整数,而是应解析为整数的字符串:

steps = {'1':'value1', '10': 'value0', '5':'value2', '2':'value3'}
Run Code Online (Sandbox Code Playgroud)

您可以使用类似于您的解决方案的东西:

for key in sorted(steps, key=lambda key: int(key)):
    print(key, steps[key])

1
2
5
10
Run Code Online (Sandbox Code Playgroud)