在OrderedDict中查找具有最小值的键

use*_*667 6 python dictionary

我需要找到其值在有序字典中最低的键,但只有当my_list中的位置为True时才需要.

from collections import OrderedDict

my_list = [True,False,False,True,True,False,False,False,]

my_lookup = OrderedDict([('a', 2), ('b', 9), ('c', 4), ('d', 7),  
                         ('e', 3), ('f', 0), ('g', -5), ('h', 9)])
Run Code Online (Sandbox Code Playgroud)

我知道怎么用for循环这样做

mins=[]
i=0
for item in my_lookup.items():
    if my_list[i]:
        mins.append(item)
    i+=1
print min(mins,key=lambda x:x[1])[0]
Run Code Online (Sandbox Code Playgroud)

版画

a
Run Code Online (Sandbox Code Playgroud)

因为a在my_list中最低也是True.

这有效,但很长,我想知道如何用理解或一行做到这一点?

Jar*_*red 24

您可以使用itertools.compresskey min作为get方法,

>>> from itertools import compress
>>> min(compress(my_lookup, my_list), key=my_lookup.get)
a
Run Code Online (Sandbox Code Playgroud)

  • +1:我第一次见过`itertools.compress`. (6认同)
  • +1,因为这是我相信使用标准Python工具的完美方式:这个解决方案可以精确地完成工作,没有任何瑕疵,并且以非常紧凑和清晰的方式. (3认同)