2012-01-17 7 views
3

다음과 같은 출력을 얻는 더 나은/클리너/더 짧은 방법이 있습니까?파이썬 중첩 사전 루프

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

하지만 난 얻을 :

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 

나는 시도

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에 대한'해봤가' –

+0

티켓 이잖아

그래서, 당신은에 의해 PL 반복한다! – beoliver

답변

4

당신은 단지 필요 pl 이후

for sub_dict in pl: 

이 목록을 해당 목록을 반복 각 하위 d 개를 줄 것입니다. 차례로.

간단한 예 :

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

예. pl()가 아닌 pl로 언급하는 이유는 무엇입니까? 그것이 기능이 아니기 때문에 그렇습니까? – beoliver

+0

수정. 'pl'은 함수가 아닌 목록이므로 "호출"해서는 안됩니다. – dhg

+0

저는 카운트 다운 시간을 기다리고 있습니다. 그래서 답을 수락 할 수 있습니다 ... 감사합니다. – beoliver

2

(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]