Я понимаю, что довольно легко проверить, есть ли ключ в словаре, но как насчет определенных значений?
Итак, у меня есть словарь списков, в котором ключ ссылается на набор, для согласованности, строк. Это будет выглядеть примерно так:
menu = {'breakfast':['soft-boiled eggs', 'hash brown', 'Earl Grey'],
'lunch':['pasta', 'soup'],
'dinner':['chips', 'beef stew', 'veggies']}
Теперь я хотел бы проверить, есть ли, скажем, 'chips'
в моем меню, и если да, я бы хотел заменить его на 'crusty bread'
. Я знаю, что могу попробовать использовать 'chips' in menu['lunch']
или то же самое для завтрака, но что, если я не знаю, когда его подают?
Extension
Хотя это сложнее объяснить, скажем, у нас есть класс с именем Food, определенный следующим образом:
class Food(object):
def __init__(self, meal):
self.meal = meal
self.ingredients = collections.defaultdict(set)
def __str__(self):
return "%s" %(self.meal)
Здесь meal
будет относиться либо к завтраку, обеду или ужину. И у нас есть ingredients
, который является словарем множеств. 'potatoes'
- это ингредиент, и при нажатии на него у нас появятся соответствующие блюда: оладьи, чипсы. Таким образом, когда я вызываю print meal, menu[meal].ingredients
для своей функции, я получаю следующий результат (это только для завтрака, так как это все, что я положил):
breakfast defaultdict(<type 'set'>, {'potatoes': set(['chips', 'hash brown']), 'eggs': set(['omelette', 'hard-boiled', 'soft-boiled']), 'tea': set(['Assam', 'Earl Grey', 'English'])})
Так что это в основном то, что доступно на завтрак для определенных «ингредиентов».
Теперь давайте предположим, что случилось худшее, и у меня кончилась картошка! Теперь я хотел бы заменить 'potatoes'
на 'bread'
, в котором у меня будут значения / типы 'roll', 'crusty', 'brown'
. Как можно это сделать?
И, наконец, к обеду у нас кончается чай 'Assam'
. Как и в случае с вопросом перед расширением, как я могу удалить это (после проверки, чтобы увидеть, существует ли оно в первую очередь)?