如何订购2位数字字典键

时间:2013-12-18 02:13:45

标签: python

我在python中有一个字典,如下所示,包含大约20个键:

a = { "1": "","2":"","3":""........"20":"" }

要对字典进行排序,我正在执行以下操作:

 for key in sorted(a.iterkeys()):
        print key

但是它似乎没有保持按键有序。它将导致此输出:

1 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 .....

我正在寻找类似的东西:

1 2 3 4 5 6 ....

任何帮助都是apreciated

2 个答案:

答案 0 :(得分:7)

我假设你的真正的字典看起来像这样:

a = {"1": "", "2": "", …, "20": ""}

否则,你首先不会遇到这个问题。

如果那是问题,那么答案就是:

for key in sorted(a.iterkeys(), key=int):
    print key

这里的诀窍是key参数。您可以将任何您想要的函数作为key传递给sorted(以及大多数其他与排序相关的函数),它将在所有值上调用该函数并根据该函数的结果进行排序而不是实际值。

内置int函数接受任何参数,并且(如果可能)将其转换为整数。特别是,如果你给它字符串"3",它会给你数字3,如果你给它"20",它会给你20。而且,虽然"3" > "20"(因为字符串按字母顺序进行比较),3 < 20(因为数字在数字上进行比较)。

有关详细信息,请参阅文档中的Sorting HOWTO

答案 1 :(得分:2)

如果您不介意第三方库,natsort库专为完全类似的情况而设计(请参阅@ abarnert的答案,了解为何需要这样做):

from natsort import natsorted
for key in natsorted(a.iterkeys()):
    print key