python:遍历按键排序的字典
我有一本Python字典python:遍历按键排序的字典,python,sorting,dictionary,Python,Sorting,Dictionary,我有一本Python字典 steps = {1:"value1", 5:"value2", 2:"value3"} 我需要迭代这个按键排序的函数 我试过这个: x = sorted(steps, key=lambda key: steps[key]) 但是这些值已经从x中消失了。您需要迭代steps.items(),因为对dict的迭代只返回其键 >>> x = sorted(steps.items()) >
steps = {1:"value1", 5:"value2", 2:"value3"}
我需要迭代这个按键排序的函数
我试过这个:
x = sorted(steps, key=lambda key: steps[key])
但是这些值已经从x中消失了。您需要迭代
steps.items()
,因为对dict的迭代只返回其键
>>> x = sorted(steps.items())
>>> x
[(1, 'value1'), (2, 'value3'), (5, 'value2')]
迭代已排序的键:
>>> for key in sorted(steps):
... # use steps[keys] to get the value
我需要迭代,这是按键排序的
我认为lambdas
在这里太过分了,试试这个:
>>> steps = {1:"val1", 5:"val2", 2:"val3"}
>>>
>>> for key in sorted(steps):
... print steps[key]
...
val1
val3
val2
根据您的用例,它可能是一个保存已排序字典的选项。有关详细信息,请参见蟒蛇。如果要将键排序为整数,则必须将它们转换为整数。这样做的最佳时机取决于您的用例。您还可以使用Python的多种SortedAct容器类型之一。这些类型自动维护按键顺序排序的词典。看看这个模块,它是纯Python和fast-as-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
键/值/项的迭代按排序键顺序自动工作。就像Zagorulkin Dmitry指出的那样,您不应该将lambda传递给排序函数。排序功能的默认行为是对键进行操作
steps = {1:"val1", 5:"val2", 2:"val3"}
for key in sorted(steps):
print steps[key]
...
val1
val3
val2
但是,将lambda传递给排序函数并不是一个更好的小收益操作(即“过度杀戮”),但实际上这是不需要的。它会降低代码的可读性,而且速度也会变慢,特别是当您要将其应用于非常大的字典或多次调用时。除了使排序目标对于(键、值)对更加明确之外,使用它没有任何好处。以下计时显示指定lambda时获得的性能影响
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
如果键不是整数,而是应解析为整数的字符串:
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
那么,我该如何迭代它,比如一个iteritems或其他什么呢?@user984003你不能对dict排序,你只能得到一个排序键、值或项的列表。@AshwiniChaudhary你根本不需要
键
对于排序
来说,字典键是唯一的,所以排序(steps.items())
很好,如果键是字符串,但我需要将其排序为int怎么办?排序(步骤)
比排序(步骤.键())
好。我知道这是一篇非常古老的文章,但我在搜索其他内容时遇到了这个问题,我想注意:对于键,排序(步骤)中的值:打印值
明显快于中的键排序(步骤):打印步骤[key]
@DaveLeBlanc:对于答案中定义的步骤中的键,值排序(步骤):打印值
给出类型错误:“int”对象不可编辑
-您的意思是对于键,值排序(步骤.iteritems()):打印值
?Python3:对于键,按排序的值(steps.items()):
。