2013-04-27 3 views
3

Я хочу использовать группу булевых языков в качестве ключа для словаря, поэтому (погода == солнечная и темная = теплая) будет 11 или True, True while (погода == солнечная и погода == холод) будет 10 и (погода == пасмурная и погода == холодная) Правда, ложь будет 00, где одежда = {11: «шорты», 10: «джинсы», 00: «куртка»} Есть ли способ сделать это? Я предполагаю, что это может потребовать манипуляции с битами, и я стараюсь держать это как можно быстрее во время работы.python логический ключ для словаря

ответ

7

Если вам действительно не нужно выполнять побитовые операции над отдельными условиями (т. Е. Вам не нужно СОСТОЯТЬ И/ИЛИ два условия вместе), может быть проще просто использовать кортеж булев в качестве ключа :

clothing = { 
    (True, True): "shorts", 
    (True, False): "jeans", 
    (False, False): "jacket" 
} 
+0

намного лучше, чем у меня. – Elazar

4

вы можете использовать побитовое или (|) оператор:

sunny = 0 
cloudy = 1 
cold = 2 
clothing = { (cold|cloudy) :"shorts", cold:"jeans", sunny:"jacket"} 

weather = something() 

print(clothing[ weather & (cold|cloudy) ]) 

, но версию кортежа, предложенную @BrenBarn лучше.

Смежные вопросы