2012-01-17 197 views
3

是否有更好/更清洁/更短的方式获得相同的输出,如下所示?Python嵌套字典循环

import plistlib 
pl = plistlib.readPlist('/Users/username/Documents/wifi1.plist') 

n = len(pl) 
count = 0 
while (count < n): 
    print('----------------') 
    print(pl[count]['NOISE']) 
    print(pl[count]['RSSI']) 
    print(pl[count]['SSID_STR']) 
    print(pl[count]['BSSID']) 
    count += 1 

我曾尝试:

for sub_dict in pl.values(): 
    print(sub_dict['NOISE'], sub_dict['RSSI'], sub_dict['SSID_STR'], sub_dict['BSSID']) 

,但我得到:

Traceback (most recent call last): 
    File "plistread.py", line 17, in <module> 
    for sub_dict in pl.values(): 
AttributeError: 'list' object has no attribute 'values' 
+1

有你在PL尝试'为sub_dict:' – 2012-01-17 10:06:47

+0

那票! – beoliver 2012-01-17 10:09:38

回答

4

你只需要:

for sub_dict in pl: 

由于pl是一个列表,通过该列表进行迭代会给你每个子d字典反过来。

一个简单的例子:

>>> l = [1,2,3,4] 
>>> for x in l: 
... print x, 
... 
1 2 3 4 
+0

是完美的。为什么我把它称为pl不是pl()?是因为它不是一个功能吗? – beoliver 2012-01-17 10:10:15

+0

正确。 'pl'是一个列表,而不是一个函数,所以它不应该被“调用”。 – dhg 2012-01-17 10:11:56

+0

我只是在等待时间倒计时,所以我可以接受你回答...谢谢 – beoliver 2012-01-17 10:14:11

2

PL是一个列表,而不是一本字典。

所以,你应该遍历PL由:

for sub_dict in pl: 
    print(sub_dict['NOISE'], sub_dict['RSSI'], sub_dict['SSID_STR'], sub_dict['BSSID']) 
1

如果我理解正确:

keys = ['NOISE', 'RSSI' ... rest of keys] 
input = [{'NOISE':1, 'RSSI':2 ... rest of data}, {'NOISE':11, 'RSSI':22 ... rest of data} ... rest of data] 

data = [[sub_dict[key] for key in keys] for sub_dict in input]