当键包含字符串和数字时,如何对OrderedDict进行排序-Python

当键包含字符串和数字时,如何对OrderedDict进行排序-Python,python,Python,我正在使用OrderedDict对键同时包含字符串和数字的dict进行排序。这是我的密码: from collections import OrderedDict x = {} x['mon'] = 10 x['day_1'] = 1 x['day_2'] = 2 x['day_10'] = 10 x['day_11'] = 11 dictionary1 = OrderedDict(sorted(x.items(), key=lambda t: len(t[0]))) dictionary2 =

我正在使用
OrderedDict
对键同时包含字符串和数字的
dict
进行排序。这是我的密码:

from collections import OrderedDict
x = {}
x['mon'] = 10
x['day_1'] = 1
x['day_2'] = 2
x['day_10'] = 10
x['day_11'] = 11
dictionary1 = OrderedDict(sorted(x.items(), key=lambda t: len(t[0])))
dictionary2 = OrderedDict(sorted(x.items(), key=lambda t: t[0]))
我希望输出看起来像(我不关心
mon:2
的位置):

但这两种方法都不起作用。所以我想我可能需要自定义一个排序规则?有什么建议吗

更新: 以下是我的综合答案(Simeon Visser和hcwhsa):

你可以做:

>>> dictionary3 = OrderedDict(sorted(x.items(), key=lambda (key, value): int(key.split('_')[1])))
>>> dictionary3
OrderedDict([('day_1', 1), ('day_2', 2), ('day_10', 10), ('day_11', 11)])
这将按
拆分键,并将日数排序为整数。

您可以执行以下操作:

>>> dictionary3 = OrderedDict(sorted(x.items(), key=lambda (key, value): int(key.split('_')[1])))
>>> dictionary3
OrderedDict([('day_1', 1), ('day_2', 2), ('day_10', 10), ('day_11', 11)])
这将按
拆分键,并将日数排序为整数。

您可以执行以下操作:

>>> dictionary3 = OrderedDict(sorted(x.items(), key=lambda (key, value): int(key.split('_')[1])))
>>> dictionary3
OrderedDict([('day_1', 1), ('day_2', 2), ('day_10', 10), ('day_11', 11)])
这将按
拆分键,并将日数排序为整数。

您可以执行以下操作:

>>> dictionary3 = OrderedDict(sorted(x.items(), key=lambda (key, value): int(key.split('_')[1])))
>>> dictionary3
OrderedDict([('day_1', 1), ('day_2', 2), ('day_10', 10), ('day_11', 11)])

这将按
“\uu”
拆分键,并将日数作为整数进行排序。

这称为“自然排序”Dup:@hcwhsa:sort-of。但是那篇文章没有使用
OrderDict
@tao.hong的解决方案。你在这里对列表进行排序(
x.items()
)而不是
OrderDict
。@谢谢你指出这一点。我确实从那篇文章中得到了一个想法。这被称为“自然排序”Dup:@hcwhsa:sort。但是那篇文章没有使用
OrderDict
@tao.hong的解决方案。你在这里对列表进行排序(
x.items()
)而不是
OrderDict
。@谢谢你指出这一点。我确实从那篇文章中得到了一个想法。这被称为“自然排序”Dup:@hcwhsa:sort。但是那篇文章没有使用
OrderDict
@tao.hong的解决方案。你在这里对列表进行排序(
x.items()
)而不是
OrderDict
。@谢谢你指出这一点。我确实从那篇文章中得到了一个想法。这被称为“自然排序”Dup:@hcwhsa:sort。但是那篇文章没有使用
OrderDict
@tao.hong的解决方案。你在这里对列表进行排序(
x.items()
)而不是
OrderDict
。@谢谢你指出这一点。我确实从那篇文章中得到了一个想法。