2017-10-18 14 views
2

중첩 된 dict에 대해 목록 이해를 사용하고 있는데 일부 dict에서는 발생하지만 모든 키에는 나타나지 않는 키에 대한 값을 찾고 있습니다 (예 : DE "와"CH "는 있지만"FR "은 아닙니다). 존재하지 않으면이 사전을 건너 뛰고 다음 사전으로 이동해야합니다.사용할 수있는 키가 있으면 목록 내포에서 중첩 된 Dict의 키 값을 찾습니다.

내 데이터 :

dict_country_data = 
    {"DE": 
    { 
     "location": 
      "europe", 
     "country_code": 
      "DE", 
     "color": 
      {"body": 37647, "wheels": 37863}, 
     "size": 
      {"extras": 40138}, 
     "flow": 
      {"abc": 3845, "cdf": 3844} 
    }, 
    "FR": 
     {"location": "europe", 
     "country_code": "FR", 
     "color": 
      {"body": 219107, "wheels": 39197}, 
     "size": 
      {"extras": 3520} 
     }, 
    "CH": 
     {"location": "europe", 
     "country_code": "CH", 
     "color": {"wheels": 39918}, 
     "size": 
      {"extras": 206275}, 
     "flow": 
      {"klm": 799, "sas": 810} 
     } 
} 

는 내 시도 :

그러나
[dict_country_data[k]["flow"].values() if dict_country_data[k]["flow"].keys() else None for k,v in dict_country_data.items()] 

의 경우-성명에도 불구하고이, 파이썬은 NamError 제기 (나가서 설명하자면 NameError : 이름이 '흐름'이 정의되어 있지 않습니다).

[3845, 3844, 799, 810] 

는 인내와 유익을 주셔서 감사합니다 :

내 출력을 갈망.

답변

0

각 항목에 대해 "flow" 키에 액세스하려고하므로 NameError가 발생하지 않지만 KeyError는 발생하지 않습니다. 대신 한 지능형리스트에 최선을 다하는의 더 많은 읽을 수있는하는 for -loop를 사용

flows = [] 
for data in dict_country_data.values(): 
    if "flow" in data: 
     flows.extend(data["flow"].values()) 
1

이 중첩 된 이해와처럼 '평평하게'하는 일반적인 방법 :

[v for country, data in dict_country_data.items() for v in data['flow'].values()]