我知道检查字典中是否有键是很容易的,但是某些值呢?你知道吗
所以,我这里有一个列表字典,其中键引用了一组,为了一致性,字符串。它看起来有点像这样:
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
虽然这很难解释,但假设我们有一个叫做食物的类,定义如下:
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'])})
所以这基本上就是早餐中提供的特定“配料”。你知道吗
现在,让我们假设最坏的情况已经发生了,我的土豆用完了!我现在想做的是用'bread'
替换'potatoes'
,在这个替换下我将有值/类型'roll', 'crusty', 'brown'
。你要怎么做呢?你知道吗
最重要的是,临近午餐时间,我们喝光了'Assam'
茶。与扩展之前的问题类似,我如何删除它(在检查它是否首先存在之后)?你知道吗
加入
menu
很容易:使用
defaultdict
的成员身份的工作方式完全相同,因为包含检查不会改变它。你知道吗一个很明显的方法是遍历整个dict并替换值,但在我看来,更好的方法是将其设计为便于替换成分,例如,每种成分都有一个单独的对象(可能是singleton类),因此您可以动态地替换类型,例如
它会影响到所有提到茶的地方。同样地,您可以在某种注册表中跟踪正在使用茶的膳食,如果您想从所有膳食中删除茶,或者可能将茶标记为已删除,或者想用面包替换土豆,则可以在注册表中执行该操作,这反过来可以要求每顿膳食执行该操作
看起来你所要求的最基本的东西是,一旦你有了字典,就可以反复阅读,这都是最基本的东西。你知道吗
现在,将其直接应用于您的情况:
“del”可用于从字典中删除键/值对
相关问题 更多 >
编程相关推荐