2016-11-09 3 views
-3

Этот словарь продолжает изменяться с помощью ключей и значений. Поэтому я хочу получить доступ к этим клавишам и значениям и напечатать их как ожидаемый ответ. Поскольку я новичок в Python, любая помощь будет высоко оценена.Python: для defaultdict, клавиши и значения печати

 dictionary= 
     {'key1': {'key10': [[66619, 'event1'], [64800, 'event2']]}, 
     'key2': {'key11': [[28250, 'event3'], [17960, 'event4'], [23484, 'event5'], [21945, 'event6']]}, 
     'key3': {'key12': [[359319, 'event7'], [322334, 'event8'], [273316, 'event9']], 'key13': [[452945, 'event10'], [414268, 'event11']]} 
     } 

Ожидаемый ответ:

Имя: key1, Адрес: key10, номер: 66619, Pin_code: event1

Имя: key1, Адрес: key10, номер: 64800, Pin_code: event2

Имя: key2, Адрес: key11, номер: 28250, Pin_code: event3

Имя: key2, Адрес: key11, номер: 17960, Pin_code: event4

Имя: key2, Адрес: key11, номер: 23484, Pin_code: event5

Имя: key2, Адрес: key11, номер: 21945, Pin_code: event6

Имя: ключ3, Адрес: key12, Номер : 359319, Pin_code: event7

Имя: ключ3, Адрес: key12, номер: 322334, Pin_code: event8

Имя: ключ3, Адрес: key12, номер: 273316, Pin_code: event9

Имя: key3, Адрес: key13, Numbe г: 452945, Pin_code: event10

Имя: ключ3, Адрес: key13, номер: 414268, Pin_code: event11

+0

где ссылка на «defaultdict» –

+0

это может вас заинтересовать: https://mail.python.org/pipermail/python-dev/2016-September/146327.html –

ответ

1

словарь неупорядоченны в природе. Вы должны использовать collections.OrderedDict(), если вы хотите сохранить заказ в пределах dict. Согласно OrderedDict document:

Return an instance of a dict subclass, supporting the usual dict methods. An OrderedDict is a dict that remembers the order that keys were first inserted. If a new entry overwrites an existing entry, the original insertion position is left unchanged. Deleting an entry and reinserting it will move it to the end.

Если вы просто хотите, чтобы напечатать это содержание без фактического хранения отсортированных данных, вы можете сделать это с простой sorted() функции как:

from operator import itemgetter 

for k, v in sorted(dictionary.items(), key=itemgetter(0)): 
    for k1, v1 in sorted(v.items(), key=itemgetter(0)): 
     for content in v1: 
      print 'Name: {}, Address: {}, Number: {}, Pin: {}'.format(k, k1, content[0], content[1]) 

, который будет печатать:

Name: key1, Address: key10, Number: 66619, Pin: event1 
Name: key1, Address: key10, Number: 64800, Pin: event2 
Name: key2, Address: key11, Number: 28250, Pin: event3 
Name: key2, Address: key11, Number: 17960, Pin: event4 
Name: key2, Address: key11, Number: 23484, Pin: event5 
Name: key2, Address: key11, Number: 21945, Pin: event6 
Name: key3, Address: key12, Number: 359319, Pin: event7 
Name: key3, Address: key12, Number: 322334, Pin: event8 
Name: key3, Address: key12, Number: 273316, Pin: event9 
Name: key3, Address: key13, Number: 452945, Pin: event10 
Name: key3, Address: key13, Number: 414268, Pin: event11 
+0

ImportError: не может импортировать имя itemgetter – Darsh

+0

Извините, мой плохой. Это 'from operator import itemgetter' –

+1

Большое спасибо. Это действительно работает – Darsh