'for loop' Python 3 словари внутри словарей из .plist (или xml) - PullRequest
0 голосов
/ 17 января 2012

Надеюсь, быстрый вопрос по Python здесь ...

import plistlib

pl = plistlib.readPlist('/Users/name/Documents/some.plist')

print(pl[0]['keyA'] , pl[0]['keyD'] , pl[0]['keyG'])

как бы написать цикл for или функцию списка, которая бы циклически проходила по словарю, печатая значения для определенных ключей.

В главном словаре будет указано 30 записей (словарей в словаре), в каждой из которых около 40 ключей.)

Пример:

print(pl[0]['keyA'] , pl[0]['keyD'] , pl[0]['keyG'])
print(pl[1]['keyA'] , pl[1]['keyD'] , pl[1]['keyG'])
print(pl[2]['keyA'] , pl[2]['keyD'] , pl[2]['keyG'])
print(pl[n]['keyA'] , pl[n]['keyD'] , pl[n]['keyG'])

, где pl - основной словарь, а затем 0 - n - это словари в словаре.

Надеюсь, это имеет смысл

Ответы [ 2 ]

1 голос
/ 17 января 2012

Просто напиши это! : Р

for sub_dict in pl.values():
    print sub_dict['keyA'], sub_dict['keyD'], sub_dict['keyG']

(.values() говорит, что нужно перебирать значения словаря, поскольку обычно перебор словаря проходит через его ключи. В Python 2 вместо этого используйте .itervalues().)

0 голосов
/ 17 января 2012

Ваша проблема не имеет ничего общего с plist, это с вложенным словарем.

Из того, что вы написали, кажется, что ваш pl диктат выглядит так:

pl = {0: {'keyA': 1, 'keyD': 2, 'keyG': 3}, 
      1: {'keyA': 11, 'keyD': 12, 'keyG': 13}}

В этом случае просто используйте:

keys = ['keyA', 'keyD', 'keyG']
for i in range(len(pl)):
    print(' '.join(str(pl[i][key]) for key in keys)

Это будет работать, если все ваши pl ключи являются числами, в противном случае вы можете использовать .items() или .values(), взгляните на официальную документацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...