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)
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)
您还可以使用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)
键/值/项的迭代按排序键顺序自动进行.
如果您的键不是整数,而是应解析为整数的字符串:
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)
| 归档时间: |
|
| 查看次数: |
59554 次 |
| 最近记录: |