2013-10-08 2 views
3

я есть неупорядоченный Dict с цифровыми клавишами, но и в виде строки, и я хочу, чтобы получить заказанную Dict (числовым ключом):питон ordereddict, когда ключ является «цифровая строка»

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())) 

как могу я просто это?

(результат, может иметь ключ в междунар или строки)

Спасибо

ответ

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)]) 
+0

Я получаю {'1': 8, '11': 2, '3': 6, '22': 1, '7': 55} ... – fj123x

+0

@ fj123x у вас есть python 2 или python 3? –

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)]) 

Это в значительной степени то же самое, как ответ Романа, хотя, так что я не знаю, почему его ответ не будет работать для вас.

2

вы также можете создать 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)]) 

, если это более полезным в качестве конечного результата.

Смежные вопросы