按自然顺序对字典键进行排序

use*_*250 5 python dictionary natural-sort

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

    d = {"key1" : object, "key11" : object, "key2" : object, "key22" : object", "jay1" : object, "jay2" : object}
Run Code Online (Sandbox Code Playgroud)

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

    d = { "jay1" : object, "jay2" : object, "key_1" : object, "key_2" : object, "key_11" : object, "key_22" : object"}
Run Code Online (Sandbox Code Playgroud)

Mar*_*cin 5

您可以将 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')])
Run Code Online (Sandbox Code Playgroud)

基本上,这里发生的事情是,我将字符串分为“字符串”部分和数字部分。数字部分更改为int,并使用这两个值进行排序。