【问题标题】:How can I find the most negative key in a python dictionary?如何在 python 字典中找到最负面的键?
【发布时间】:2019-10-25 20:25:51
【问题描述】:

我正在尝试在字典 imdb_dict 中找到最积极和最消极的值:

imdb_dict = {'the': '0.0490972013402',
 'and': '0.201363575849',
 'a': '0.0333946807184',
 'of': '0.099837669572',
 'to': '-0.0790210365788',
 'is': '0.188660139871',
 'it': '0.00712569582356',
 'in': '0.109215821589',
 'i': '-0.154986397986'}

使用此处找到的代码:Getting key with maximum value in dictionary?

我可以使用以下方法获得字典的最大值:

import operator
max(imdb_dict.items(), key=operator.itemgetter(1))

但是,我找不到在字典中获取最大负值的方法,因为使用 min 显示最接近 0 的值。有没有办法修改运算符以获得最大负值或更简单的方法来完成一样吗?

【问题讨论】:

  • 您的值是字符串。如果将它们转换为数字进行数值比较, min 将可以正常工作。
  • val = min(float(val) for val in imdb_dict.values())
  • 如果你正在寻找价值,那么看看stackoverflow.com/questions/16099112/…
  • min(imdb_dict.items(), key=lambda x: float(x[1]))

标签: python


【解决方案1】:

这里的问题是值是strings,所以排序是按字典顺序排列的。你需要一个lambda 函数来将min 在字典中的值上作为floats

min(imdb_dict.items(), key=lambda x: float(x[1]))
# ('i', '-0.154986397986')

注意这样做:

'-0.154986397986' < '-0.0790210365788'

您会得到False,因为这只是检查给定字符在ASCII 表中占据的位置,以辨别哪个是最低的。因此,决定哪个字符串最低的字符将是第一个差异发生的位置,在这种情况下,点后面的数字,即10

【讨论】:

    【解决方案2】:
    imdb_dict = {'the': '0.0490972013402',
     'and': '0.201363575849',
     'a': '0.0333946807184',
     'of': '0.099837669572',
     'to': '-0.0790210365788',
     'is': '0.188660139871',
     'it': '0.00712569582356',
     'in': '0.109215821589',
     'i': '-0.154986397986'}
    
    min_val = min(map(lambda x:float(x), imdb_dict.values()))
    key = [i for i in imdb_dict.keys() if imdb_dict[i]==min_val]
    
    print(key)
    # output 'i'
    

    【讨论】:

      【解决方案3】:

      这里

      imdb_dict = {'the': '0.0490972013402',
                   'and': '0.201363575849',
                   'a': '0.0333946807184',
                   'of': '0.099837669572',
                   'to': '-0.0790210365788',
                   'is': '0.188660139871',
                   'it': '0.00712569582356',
                   'in': '0.109215821589',
                   'i': '-0.154986397986'}
      
      for i, k in enumerate(imdb_dict.keys()):
          if i == 0:
              _min = (float(imdb_dict[k]), k)
          else:
              if float(imdb_dict[k]) < _min[0]:
                  _min = (float(imdb_dict[k]), k)
      print(_min)
      

      输出

      (-0.154986397986, 'i')
      

      【讨论】:

        猜你喜欢
        • 2018-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 2014-03-21
        相关资源
        最近更新 更多