代码之家  ›  专栏  ›  技术社区  ›  Jorge Guberte

从字典中获取最高和最低键的最简单方法是什么?

  •  3
  • Jorge Guberte  · 技术社区  · 14 年前
    self.mood_scale = {
        '-30':"Panic",
        '-20':'Fear',
        '-10':'Concern',
        '0':'Normal',
        '10':'Satisfaction',
        '20':'Happiness',
        '30':'Euphoria'}
    

    我需要设置两个变量: max_mood min_mood ,所以我可以对股票行情设置一些限制。 获得最低和最高键的最简单方法是什么?

    3 回复  |  直到 14 年前
        1
  •  8
  •   Bryan Oakley    14 年前

    应该这样做:

    max_mood = max(self.mood_scale)
    min_mood = min(self.mood_scale)
    

    也许不是最有效的(因为它必须获得和遍历键列表两次),但肯定非常明显和清晰。

    更新:我不知道你的钥匙是线。因为这听起来好像是一个错误,所以我会让它保持原样,但请注意,它要求键是实际的整数。

        2
  •  12
  •   SilentGhost    14 年前
    >>> min(self.mood_scale, key=int)
    '-30'
    >>> max(self.mood_scale, key=int)
    '30'
    
        3
  •  7
  •   fabmilo    14 年前

    那是有效的蟒蛇吗?我想你的意思是:

    mood_scale = {
        '-30':"Panic",
        '-20':'Fear',
        '-10':'Concern',
        '0':'Normal',
        '10':'Satisfaction',
        '20':'Happiness',
        '30':'Euphoria'}
    
    print mood_scale[str(min(map(int,mood_scale)))]
    print mood_scale[str(max(map(int,mood_scale)))]
    

    输出

    恐慌 兴奋

    以ints作为键,可以更快更好地

    mood_scale = {
        -30:"Panic",
        -20:'Fear',
        -10:'Concern',
        0:'Normal',
        10:'Satisfaction',
        20:'Happiness',
        30:'Euphoria'}
    
    print mood_scale[min(mood_scale))]
    print mood_scale[max(mood_scale))]
    

    编辑2: 使用迭代器更快

    print timeit.timeit( lambda: mood_scale[min(mood_scale.keys())])
    print timeit.timeit( lambda: mood_scale[min(mood_scale)])
    1.05913901329
    0.662925004959
    

    另一种解决方案是在插入时跟踪max/min值,然后简单地执行 mood_scale.min()/max())