python ordereddict当键是“数字字符串”时

时间:2013-10-08 10:07:09

标签: python dictionary sorted ordereddictionary

我有一个带数字键的无序字典,但是字符串格式,我想得到一个有序的字典(用数字键):

my_dict__ = {'3': 6, '1': 8, '11': 2, '7': 55, '22': 1}
my_dict_ = {}
for key, value in my_dict__.items():
    my_dict_[int(key)] = value
my_dict = OrderedDict(sorted(my_dict_.items()))

我怎么能这么简单?

(结果,可以将键作为int或string)

由于

3 个答案:

答案 0 :(得分:3)

这样的事情:

my_dict = OrderedDict(sorted(my_dict__.items(), key=lambda x:int(x[0])))
# OrderedDict([('1', 8), ('3', 6), ('7', 55), ('11', 2), ('22', 1)])

答案 1 :(得分:3)

你也可以直接用以下内容创建int dict:

my_dict = OrderedDict(sorted((int(key), value) for key, value in my_dict__.items()))

这会给你:

OrderedDict([(1, 8), (3, 6), (7, 55), (11, 2), (22, 1)]) 

如果这作为最终结果更有用。

答案 2 :(得分:1)

这对我有用。

>>> from collections import OrderedDict
>>> my_dict__ = {'3': 6, '1': 8, '11': 2, '7': 55, '22': 1}
>>> keylist = sorted(my_dict__.keys(), key=lambda x: int(x))
>>> my_dict = OrderedDict(((k, my_dict__[k]) for k in keylist))
>>> my_dict
OrderedDict([('1', 8), ('3', 6), ('7', 55), ('11', 2), ('22', 1)])

这与罗马的答案几乎完全相同,所以我不知道为什么他的答案对你不起作用。