6

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

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]

版画

a

a が最小であり、my_list でも True であるためです。

これは機能しますが、長いので、理解または1行でそれを行う方法を知りたいですか?

4

4 に答える 4

3

ジェネレータ式と を組み合わせることもできますmin:

>>> min(((value, key) for ((key, value), flag) in zip(my_lookup.iteritems(), my_list) if flag))[1]
'a'
于 2013-07-14T10:07:08.417 に答える
1

価値があるのは、元のコードのわずかなバリエーションが適切に実行され (ovgolovin のアプローチと同等)、非常に読みやすいことです。

minimum = (None, float('inf'))
for i, item in enumerate(my_lookup.items()):
    if not my_list[i]:
        continue
    if item[1] < minimum[1]:
        minimum = item
return minimum[0]

ovgolovin のイデオン ベンチマークに基づくと、元のコードでさえこれよりわずかに遅いだけです。もちろん、Jared のソリューションはかなり高速で、かなり短くなっています。

于 2013-07-14T14:04:12.980 に答える