2017-10-18 67 views
2

我正在使用列表理解來尋找鍵值「流量」的嵌套詞典,該鍵值在某些詞典中出現但不是全部(在示例中爲「 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()] 

然而,儘管if語句,Python會引發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()]