检查多个最大字典值并相应地输出密钥

时间:2014-02-01 14:02:20

标签: python list if-statement dictionary

我正在制作一个程序,需要检查4面相互输入的总和,并根据最高总和输出一些东西。我使用ifelif语句制作了一个“算法”,但是问题在于它大约有250行代码。所以我开始研究一种不同的(正确的)方法来相互检查这些变量,我创建了下面的代码。唯一的问题是,如果2或3的总和相同,则此代码不起作用。这是由于使用了max()函数,它只输出一个最大值。现在我想知道是否有办法实现这一点,例如:sum_rightsum_left是相同的,它会输出字符串/键'left'和字符串{{ 1}}。所以我可以检查然后选择要执行的哪一方。到目前为止,在浏览这个论坛并浏览python文档时,我还没有找到答案。非常感谢提前!

'right'

2 个答案:

答案 0 :(得分:1)

您需要找到最大值:

maxval = max(sum_input_list.values()) 

然后获取相应的键:

sides = [k for k, v in sum_input_list.items() if v == max_val]

答案 1 :(得分:1)

from from collections import defaultdict

sum_right = sum(map(int, raw_input('Right').split(',')))
sum_left = sum(map(int, raw_input('Left').split(',')))
sum_front = sum(map(int, raw_input('Front').split(',')))
sum_back = sum(map(int, raw_input('Back').split(',')))

# create a dict to keep these values
_vals = {
    "right": sum_right,
    "left": sum_left,
    "front": sum_front,
    "back": sum_back,
}

# create a default dict, whose default value is an empty list. that means, when you create a new key in the dict, its value will set to an empty list
final_vals = defaultdict(list)
for direction, value in _vals.items():
    final_vals[value].append(direction)  # create keys from values and add each direction to related value

你会有一个像下面这样的词典

>> final_vals
>> {5: ["right", "front"],
    4: ["left"],
    1: ["back"]}

您现在可以从键中选择最大值

>> final_vals[max(final_vals.keys())]
>> ["right", "front"]

从他们构建你的字符串

best_directions = final_vals[max(final_vals.keys())]
print "do something %s" % ", ".join(best_directions)

>> "do something right, front"

您还将摆脱if块用于打印路线。