2016-08-24 2 views
-1

파이썬 dicts에 이상한 키 오류가 발생합니다. 내 열쇠는 "B19013_001E"이며 중첩 된 dict "속성"을 사용하여 내 dict "sf_tracts"의 이름을 지정했습니다. 여기에 내 코드입니다 :이파이썬 키 오류 _

x = "B19013_001E" 
for tract in sf_tracts: 
    print tract["properties"][x] 

, 나는 KeyError를 얻을 :이에 코드를 변경하는 경우 "B19013_001E"그러나

를, 값이 인쇄되는 :

x = "B19013_001E" 
for tract in sf_tracts: 
    for key in tract["properties"]: 
     if key == "B19013_001E": 
      print tract["properties"][x] 

무엇입니까 차?

-edit- 다른 키를 인쇄 할 수 있으므로이 문제는 밑줄로 생각됩니다. 이 키에 어떻게 액세스합니까?

감사

+1

정확하게'sf_tracts'에 무엇이 있습니까 – depperm

+1

문자열에 밑줄에 특별한 것은 없습니다. 'print list (tract [ 'properties'])'는 무엇을 생성합니까? 당신은 그 하나의 키의 정확한 인용 표현을 공유 할 수 있습니까? –

+6

당신은'** sf_tracts'에 하나 이상의 ** 사전을 가지고 있습니다. * 모든 * 사전에는 그 열쇠가 없습니다. 'for key in dictionary '루프는'tract [ "properties"] : print tract [ "properties"] [x]'로 바꿀 수 있습니다. –

답변

3

당신은 키가 tract in sf_tracts 루프가 발생 모든 사전에 존재한다고 가정한다. 그 가정은 부정확합니다.

코드의 두 번째 부분은 비용이 많이 들지만 본질적으로 키가 존재하는지 테스트하기 때문에 작동합니다.

for tract in sf_tracts: 
    if x in tract["properties"]: 
     print tract["properties"][x] 

또는 당신은 사용할 수 있습니다 : 당신이 대신 할 수있는 값에 밑줄 문자열 키에 대한 특별한 것은 달리 없다

for tract in sf_tracts: 
    print tract["properties"].get(x, 'Key is not present') 

. 밑줄은 그러한 키가 처리되는 방법에 아무런 차이가 없습니다.

1

일부 관할 구역에서 특정 키가 누락되어 있어야합니다. 첫 번째 경우에는 모든 영역에 키 인쇄를 요청하는 반면 두 번째 단계에서는 키가있는 인쇄 작업으로 만 인쇄 작업을 제한합니다.