代码之家  ›  专栏  ›  技术社区  ›  RustyShackleford

在比较整数值时,如何强制max()打破平局?

  •  0
  • RustyShackleford  · 技术社区  · 5 年前

    我有四个这样的整数变量:

    a = 3 
    b = 1
    c = 0
    d = 3
    

    我把它们放进字典里,就像这样:

    big_number = {'a': a, 'b': b,\
                      'c': c, 'd': d}
    

    我想选择与最大整数值相关联的变量。

    我尝试选择最大的整数值,比如:

    winner = max(big_number, key=big_number.get)
    

    有两个问题:

     1. winner is only choosing first variable with the greatest value when there is tie with multiple variables. 
     2. I dont know how detect and break the tie if one happens. 
    

    我想强制 winner 变量(如果同时设置了领带) d .

    我该怎么做?

    3 回复  |  直到 5 年前
        1
  •  1
  •   mti2935    5 年前

    我想不出一个紧凑的“蟒蛇”方法来实现这一点,但是你可以像这样通过查字典来实现:

    a = 3 
    b = 1
    c = 0
    d = 3
    
    big_number = {'a': a, 'b': b, 'c': c, 'd': d}
    
    hival=None
    hikey=None
    tie=False
    for key in big_number:
        val=big_number[key]
        if(hival is None or val>hival):
            hikey=key
            hival=val
            tie=False
        elif(val==hival):
            tie=True
    
    if(tie):
        print('tie')
    else:
        print('hikey:', hikey, 'hival:', hival)     
    
        2
  •  0
  •   DjaouadNM    5 年前

    您可以反转键列表以获取具有最大值的最后一个键:

    winner = max(list(big_number)[::-1], key=big_number.get)
    
    print(winner)
    

    输出:

    d
    
        3
  •  0
  •   Selcuk    5 年前

    而不是使用 max 使用 sorted 检查第一个和第二个元素是否相同。如果是的话,有一条领带:

    big_number = {'a': 3, 'b': 1, 'c': 0, 'd': 3}
    default = 'b'
    sorted_numbers = sorted(big_number, key=big_number.get)
    if big_number[sorted_numbers[-1]] == big_number[sorted_numbers[-2]]:
        print(default)
    else:
        print(sorted_numbers[-1])
    

    如果您对前2项不感兴趣,并且想检查是否有重复的值,可以比较dict和 set() 其价值:

    if len(big_number) != len(set(big_number.values())):
        print(default)
    else:
        # do something else...