2012-01-17 103 views
0

希望快速蟒蛇这里的问题...“for循环”中词典巨蟒-3词典从的.plist(或XML)

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请参阅字典中的字典。

我希望这是有道理的

回答

1

只是写它! :P

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

.values()说来遍历字典的值,因为通常在字典迭代通过其键变为在Python 2使用.itervalues()代替。)

+0

'文件 “plistread.py”,第6行 打印sub_dict [ '噪声'],sub_dict [ 'SSID_STR'],sub_dict [ 'BSSID'] ^ 语法错误:无效syntax' – beoliver 2012-01-17 08:05:05

+0

'回溯(最近最后一次通话): 文件 “plistread.py”,5号线,在 为sub_dict在pl.values(): AttributeError的: '名单' 对象有没有属性 '值' ' – beoliver 2012-01-17 08:05:59

+1

如果说'名单'对象有没有属性“值”,那么“list”对象没有“值”属性!问题是外部数据结构是一个列表而不是字典。要迭代列表,你可以在pl:中写'for sub_dict。 – katrielalex 2012-01-17 11:34:43

0

你的问题无关与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(),看看official dict documentation