按自然顺序排序字典键

时间:2014-06-12 03:41:30

标签: python dictionary natural-sort

我想以"自然顺序"对字典键进行排序。如果我有一把带有键的字典

    d = {"key1" : object, "key11" : object, "key2" : object, "key22" : object", "jay1" : object, "jay2" : object}

我想对这个字典进行排序,结果是:

    d = { "jay1" : object, "jay2" : object, "key_1" : object, "key_2" : object, "key_11" : object, "key_22" : object"}

4 个答案:

答案 0 :(得分:2)

您可以将dict更改为OrderedDict

import collections, re

d = {"key1" : 'object', "key11" : 'object', "key2" : 'object', "key22" : 'object', "jay1" : 'object', "jay2" : 'object'}


my_fun = lambda k,v: [k, int(v)]

d2 = collections.OrderedDict(sorted(d.items(), key=lambda t: my_fun(*re.match(r'([a-zA-Z]+)(\d+)',t[0]).groups())))

print(d2)
#reslt: OrderedDict([('jay1', 'object'), ('jay2', 'object'), ('key1', 'object'), ('key11', 'object'), ('key2', 'object'), ('key22', 'object')])

基本上,这里发生了什么,我将字符串拆分为' string'部分和数字部分。数字部分更改为int,并使用这两个值进行排序。

答案 1 :(得分:1)

正如其他人所说,字典不是订购的。但是,如果要以自然顺序迭代这些键,则可以执行以下操作:

d = {"key1" : object, "key11" : object, "key2" : object, "key22" : object, "jay1" : object, "jay2" : object}
sortedKeys = sorted(d.keys())
print sortedKeys
for key in sortedKeys:
    print d[key]

答案 2 :(得分:0)

在Python中,{'a': object, 'b': object}{'b': object, 'a': object}完全相同,因为字典不是有序的。

答案 3 :(得分:0)

您无法订购dictionaries,因为他们的订单看似任意(实际上并非如此)。相反,您可以使用natsort.natsorted()

items()进行排序
d = {"key1" : object, "key11" : object, "key2" : object, "key22" : object, "jay1" : object, "jay2" : object}
print natsort.natsorted(d.items()) #[('jay1', <type 'object'>), ('jay2', <type 'object'>), ('key1', <type 'object'>), ('key2', <type 'object'>), ('key11', <type 'object'>), ('key22', <type 'object'>)]
相关问题