2017-07-25 32 views
1

我正在做兩個元組列表,做了一些計算並創建了一個字典,或者至少嘗試了一下,以便我可以找到具有最大百分比的字符。Python - 添加到字典中,找到最大值

dict_original = dict(original_list) 
    for c, p in new_list: 
     if c in dict_original and dict_original[c] < p: 
      diff = p - dict_original[c] 
      output = {c:round(diff,3)} 
      print output 

我得到的輸出是這樣的:

{'o': 0.026} 
{'x': 0.046} 
{'t': 0.037} 
{'/': 0.038} 
{'p': 0.037} 
{'s': 0.038} 

所有我想要的是擁有最大比例的字符; 'x',在這種情況下。到目前爲止,我一直使用max未成功。 我知道,我的輸出似乎是一堆字典,這就是爲什麼我在這裏尋求幫助。

謝謝!

+0

刪除打印輸出,它會打印最後一個更大的數字 – Eliethesaiyan

+0

@yodish care在你的問題中增加更多的上下文,比如'orignal_list'是什麼,什麼是'new_list',以及你想要對所有數據做什麼? – cizixs

回答

1

沒有看到您的數據很難給您適當的指導。

您並未創建所有結果的新字典,只是每個結果的字典被丟棄。您可以使用詞典理解來創建完整的詞典,例如這相當於你的for循環:

do = dict_original 
output = {c: round(p-do[c], 3) for c, p in new_list if do.get(c, float('inf')) < p} 

要從本字典的最大值,然後由@batman指出:

max(output, key=output.get) 

將從環路返回'x'

+0

我會被詛咒的,謝謝先生! – yodish

1

您可以通過max一個key說法:

bar = max(foo, key=foo.get) 

這會給你最大價值的關鍵。

+1

'key = foo.get'就足夠了。 – AChampion

+0

我認爲'lambda'表達式使得它更清晰一些。還是我想像? – Batman

+0

是的,你正在想象。 '.get()'是顯式的,而匿名函數更加詳細,必須閱讀才能理解。 –