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

2024-04-29 14:02:36 发布

您现在位置:Python中文网/ 问答频道 /正文

self.mood_scale = {
    '-30':"Panic",
    '-20':'Fear',
    '-10':'Concern',
    '0':'Normal',
    '10':'Satisfaction',
    '20':'Happiness',
    '30':'Euphoria'}

我需要设置两个变量:max_moodmin_mood,这样我就可以对一个ticker设置一些限制。 什么是最容易得到最低和最高的钥匙?


Tags: selfminmax钥匙tickernormalscalemood
3条回答

这应该做到:

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

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

更新:我没意识到你的钥匙是字符串。因为这听起来好像是个错误,所以我会让它保持原样,但请注意,它要求键是实际的整数。

>>> min(self.mood_scale, key=int)
'-30'
>>> max(self.mood_scale, key=int)
'30'

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

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)))]

输出

Panic Euphoria

以整数为键,更快更好

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()

相关问题 更多 >