Python 按自然顺序对字典键排序

Python 按自然顺序对字典键排序,python,dictionary,natural-sort,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

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

    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"}

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

你不能对
字典进行排序,因为它们的顺序看起来是任意的(实际上不是)。相反,您可以使用以下方法对
项进行排序()

d={“key1”:object,“key11”:object,“key2”:object,“key22”:object,“jay1”:object,“jay2”:object}
打印natsort.natsorted(d.items())#[('jay1',),('jay2',),('key1',),('key2',),('key11',),('key22',)]

正如其他人所说,字典是没有顺序的。但是,如果希望按自然顺序遍历这些键,可以执行以下操作:

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]

您可以将dict更改为:


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

使用字典不排序。你无法控制字典键的顺序。你是在问如何“对字典进行排序”(在这种情况下,问题是重复的)还是如何按自然顺序对(任何东西)进行排序(非常确定它是重复的)?我不相信这是重复的,因为标记为重复的问题是关于标准排序的,而这个问题是关于自然排序的。这不会按自然顺序对键进行排序。@user2909250抱歉,我修改了示例以包含缺少的“自然”顺序。您可以通过使用
natsort.natsorted
避免long
lambda
和regex。这不会按自然顺序对键进行排序。@user2909250现在是:)
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]
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')])