2017-07-25 75 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()'是显式的,而匿名函数更加详细,必须阅读才能理解。 –