2015-08-17 2 views
0

У меня есть этот Dict ниже, и я не знаю, как кольцую через, чтобы получить правильные данные, которые я хочу,Python - цикл словаря?

py_dict = {'age': {0: 10, 1: 30.0, 2: 19.0}, 'name': {0: u'Michael', 1: u'Andy', 2: u'Justin'}} 

for item in py_dict: 
    print("Name:",item[0]) 
    print("Age:", item[1]) 
    print("") 

Результат,

('Name:', 'a') 
('Age:', 'g') 

('Name:', 'n') 
('Age:', 'a') 

Но то, что я хочу,

Name: Michael 
Age: 10 

Name: Andy 
Age: 30 

and so on.... 

EDIT:

py_dict = pandas_df.to_dict() 
print py_dict 

    age  name 
0 NaN Michael 
1 30  Andy 
2 19 Justin 
+2

Взгляните на этот раздел учебника - https://docs.python.org/3/tutorial/datastructures. html # looping-methods – wwii

ответ

2

Вы думаете о пробегаем по словарях неправильно, когда вы делаете -

for i in dict: 

i на самом деле ключ в словаре, а не значение. Пример -

>>> d = {1:2,3:4} 
>>> for i in d: 
...  print(i) 
... 
1 
3 

Как вы можете видеть, он напечатал keys не значения. Поэтому, если вам нужны ключи, а также значения, перейдите по iteritems() (для Python 2.x) или items() (для Python 3.x). Оба возвращают список кортежей, где первым элементом кортежа является ключ, а второй - значение.

Во-вторых, после этого, вы только получаете словари для каждого name, а также age отдельно, если вы хотите, чтобы получить их вместе, я предложил бы идти через ключи от одного из них и получать name и age используя что , Пример -

py_dict = {'age': {0: 10, 1: 30.0, 2: 19.0}, 'name': {0: u'Michael', 1: u'Andy', 2: u'Justin'}} 

for key in py_dict['name']: 
    print "Name:",py_dict['name'][key] 
    print "Age:", py_dict['age'][key] 
    print 

Пример/Demo -

>>> py_dict = {'age': {0: 10, 1: 30.0, 2: 19.0}, 'name': {0: u'Michael', 1: u'Andy', 2: u'Justin'}} 
>>> 
>>> for key in py_dict['name']: 
...  print "Name:",py_dict['name'][key] 
...  print "Age:", py_dict['age'][key] 
...  print 
... 
Name: Michael 
Age: 10 

Name: Andy 
Age: 30.0 

Name: Justin 
Age: 19.0 

Еще одно замечание, вы, кажется, использует Python 2.x, в этом случае print это утверждение, а не функция, если вы хотите функцию печати, вы нужно было бы сделать - from __future__ import print_function. Но вы им действительно не нужны, используйте их в качестве утверждений, как я уже говорил выше.

+0

Большое спасибо за подробные ответы! – laukok

+1

Рад, что мне было полезно. Я также хотел бы посоветовать вам принять ответ (когда вы найдете, что он удовлетворительно ответил на ваш вопрос), это было бы полезно для сообщества. –

+0

Я просто сделал. Благодарю. – laukok

1

Если вы должны сохранить ваши данные структурированы таким образом, сделать:

#!/usr/bin/env python3 
py_dict = {'age': {0: 10, 1: 30.0, 2: 19.0}, 'name': {0: u'Michael', 1: u'Andy', 2: u'Justin'}} 

for i in range(len(py_dict['age'])): 
    print('Name: ', py_dict['name'][i]); 
    print('Age: ', py_dict['age'][i]); 

Но было бы лучше, чтобы реорганизовать свой код, как:

#!/usr/bin/env python3 
py_dict = [{'age':10,'name':'Michael'},{'age':30,'name':'Andy'},{'age':19,'name':'Justin'}] 

for item in py_dict: 
    print('Name: ', item['name']) 
    print('Age: ', item['age']) 
+0

Спасибо. Как можно превратить мои данные в этот формат - '[{'age': 10, 'name': 'Michael'}, {'age': 30, 'name': 'Andy'}, {'age': 19, 'имя': 'Justin'}] '? Пожалуйста, см. Мое редактирование выше – laukok

+1

О, я просто сказал, что было бы лучше сохранить данные во втором формате, если бы вы составляли формат ваших данных.Но так как вы не являетесь и данные выводятся из базы данных, все в порядке, просто используйте первый метод. – user156213

+0

Pandas design that lol – laukok

2

Используя тот же словарь, этот метод также работает.

py_dict = {'age': {0: 10, 1: 30.0, 2: 19.0}, 'name': {0: u'Michael', 1: u'Andy', 2: u'Justin'}} 

for index, name in py_dict['name'].items(): 
    print("Name: " + name) 
    print("Age: " + str(py_dict['age'][index])) 
    print("") 
1

Я думаю, что для динамических целей Dict и элементов этот код может работать:

for j in py_dict.values(): 
    for k in j.keys(): 
     for i in py_dict.keys(): 
      print py_dict[i][k] 
Смежные вопросы