2015-05-22 124 views
-2

我有套疊的鍵值的列表,從一個大文件的列表嵌套的最大/最小:查找字典鍵

mainLs = [{'99999': {'popDensity': 0.0, 'housingDensity': 1.8062141714841409e-07}, '53000': {'popDensity': None, 'housingDensity': None}, '56938': {'popDensity': None, 'housingDensity': None}, '22594': {'popDensity': 0.003762399188257728, 'housingDensity': 0.002336601878903448}, '49194': {'popDensity': 0.0, 'housingDensity': 0.0005159765063886844}, '54232': {'popDensity': 0.0, 'housingDensity': 0.00046439265846193704}, '06000': {'popDensity': None, 'housingDensity': None}, '00562': {'popDensity': 0.0007453821299310868, 'housingDensity': 0.00035915666845218}, '68084': {'popDensity': 0.0, 'housingDensity': 0.0}}] 

我想回到一個用戶友好的字符串,要注意與最高popDensity的地方。

def find_densest(k, lst): 
    placeId = max(lst, key =lambda place: lst[place][k] if place[k]) 
    ans = "Densest placeFIPS is " + str(placeId) + " for " + k 
    print(ans) 

# Expected Output 
find_densest('popDensity', mainLs) 
>>> "The densest place ID is 22594 with the popDensity of 0.003762399188257728" 

我需要保留與密鑰相同位置的多個實例。有沒有辦法做到這一點?

+0

你有一個列表字典或單字典嗎? –

+0

我在一個mainLs列表中有152個字典條目。我必須使用一個列表,因爲'place'鍵可能重複。 – akh88

+0

@ akh88然後'mainLs'應該以{ – JuniorCompressor

回答

1

你有兩個問題,你的關鍵功能:

lambda density: lst[density][k] 

首先,爭論的關鍵作用將是的lst -a地方dict一個元素,不是密度,或任何你能使用作爲list的索引。所以:

lambda place: place[k] 

這就是你目前的TypeError;你正試圖使用​​一個地方dict作爲一個列表的索引。


但是,如果你解決這個問題,你有另外一個問題。您正試圖對一組包含floatNone的值調用max。這是不明確的,Python不會試圖猜測你的意思。 None是否意味着沒有人口,所以它應該算作最低或者未知人口,所以它應該被跳過,或者......什麼?一旦你可以用英文解釋規則,你可以把它翻譯成Python。

例如,下面是把None爲最低價值的關鍵功能:

place = max(lst, key=lambda place: place[k] if place[k] is not None else -1) 

或者,這裏有一個生成器表達式是跳過了None值:

place = max((place for place in lst if place[k] is not None), 
      key=lambda place: place[k]) 

而且同時,這假設你首先得到的是一個有效的字典清單。你向我們展示的是SyntaxError,所以很難猜出你的真實情況。也許是一系列口號的字典,或者是一個口號的字典?在不知道的情況下,你肯定有可能在迭代你所擁有的任何方式時出現另一個錯誤......但是除非我們能看到你真正擁有的東西,否則不可能告訴你如何解決它。

例如,如果你有一個字典字典,mainLs中的每個東西只是一個地名,而不是一個地方dict。另一方面,如果它是一個字典的列表,那麼mainLs中的每個字詞將是一個字典,其唯一的關鍵字是地名,其唯一的值是dict,在這種情況下,您需要查找該值的密度,而不是頂級字典。對其中一個解決方案起作用的解決方案對於沒有改變的其他解決方案不起作用。