파이썬 JSON은 첫 번째 수준에서만 키를 얻습니다.


81

매우 길고 복잡한 json 개체가 있지만 첫 번째 수준의 항목 / 키만 얻고 싶습니다!

예:

{
    "1": "a", 
    "3": "b", 
    "8": {
        "12": "c", 
        "25": "d"
    }
}

나는 1,3,8 을 얻고 싶다결과적으로 !

이 코드를 찾았습니다.

for key, value in data.iteritems():
    print key, value

그러나 그것은 모든 키를 인쇄합니다 (또한 12 및 25 )


5
아니요, 그렇지 않습니다. 키와 하위 사전을 포함하는 값을 인쇄합니다. 키만 인쇄하려면 값을 인쇄하지 마십시오.
Daniel Roseman 2013-04-03


1
하지만 난 내가이 그냥 목적으로 디버깅이었다 "값을"ommit 수 알아 ... subdictionary 키를 원하지 않는다
TeNNoX

답변:


133

그냥 간단하게 .keys()

>>> dct = {
...     "1": "a", 
...     "3": "b", 
...     "8": {
...         "12": "c", 
...         "25": "d"
...     }
... }
>>> 
>>> dct.keys()
['1', '8', '3']
>>> for key in dct.keys(): print key
...
1
8
3
>>>

정렬 된 목록이 필요한 경우 :

keylist = dct.keys()
keylist.sort()

@karthikr 1, 3, 8.12, 8.25로 출력을 얻는 방법. 기본적으로 출력에 부모 및 자식 키가 구분 기호로 구분되기를 원합니다
JKC


3

Karthik이 언급했듯이 dct.keys()작동하지만 dict_keys유형이 아닌 유형의 모든 키를 반환합니다 list. 따라서 목록의 모든 키를 원하면 list(dct.keys())작동합니다.


1

파이썬 객체가 유형의 인스턴스인지 확인하는 좋은 방법 isinstance()은 파이썬의 '내장'함수 를 사용 하는 것입니다. Python 3.6의 경우 :

dct = {
       "1": "a", 
       "3": "b", 
       "8": {
            "12": "c", 
            "25": "d"
           }
      }

for key in dct.keys():
    if isinstance(dct[key], dict)== False:
       print(key, dct[key])
#shows:
# 1 a
# 3 b
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.