我有一个Python字典
steps = {1:"value1", 5:"value2", 2:"value3"}
我需要按键进行排序并迭代。我尝试了这个:x = sorted(steps, key=lambda key: steps[key])
但是 x 中的值已经消失了。
我有一个Python字典
steps = {1:"value1", 5:"value2", 2:"value3"}
我需要按键进行排序并迭代。我尝试了这个:x = sorted(steps, key=lambda key: steps[key])
但是 x 中的值已经消失了。
>>> steps = {1:"val1", 5:"val2", 2:"val3"}
>>>
>>> for key in sorted(steps):
... print steps[key]
...
val1
val3
val2
你需要迭代 steps.items()
,因为字典的迭代只会返回它的键。
>>> x = sorted(steps.items())
>>> x
[(1, 'value1'), (2, 'value3'), (5, 'value2')]
按排序后的键迭代:
>>> for key in sorted(steps):
... # use steps[keys] to get the value
sorted
指定一个key
,因为字典键本身就是唯一的,所以sorted(steps.items())
完全可以正常工作。 - jamylakfrom 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
如果您的键不是整数,而是应解析为整数的字符串:
steps = {'1':'value1', '10': 'value0', '5':'value2', '2':'value3'}
for key in sorted(steps, key=lambda key: int(key)):
print(key, steps[key])
1
2
5
10
正如Zagorulkin Dmitry所指出的那样,您不应该将lambda传递给排序函数。排序函数的默认行为是作用于键。
steps = {1:"val1", 5:"val2", 2:"val3"}
for key in sorted(steps):
print steps[key]
...
val1
val3
val2
steps = {randint(0, 100000): randint(0, 100000) for _ in range(100000) } # random dict
%%timeit
sort_list = [value for _, value in sorted(steps.items(), key=lambda item: item[0])]
1 loops, best of 3: 241 ms per loop
%%timeit
sort_list = [steps[k] for k in sorted(steps, key=lambda k: k)]
1 loops, best of 3: 196 ms per loop
%%timeit
sort_list = [ steps[key] for key in sorted(steps) ]
10 loops, best of 3: 106 ms per loop
根据您的使用情况,保持一个已经排序过的字典可能是一个好选择。请参考Python OrderedDict了解详细信息。如果您想将键按整数排序,则必须将它们转换为整数。最佳转换时机取决于您的使用情况。
sorted(steps)
比sorted(steps)
好?有性能差异吗? - circuitBurnfor key,value in sorted(steps): print value
比for key in sorted(steps): print steps[key]
快得多。 - Dave LeBlancfor key, value in sorted(steps.items()):
。 - Kirill Bulygin