我的结构在YAML文件中是这样的:
nutrition:
fruits:
apple:
banana:
pear:
veggies:
spinach:
zucchini:
squash:
meats:
chicken:
fish:
ham:
我用yaml.load()
加载它不确定,但可能是因为叶子元素末端的冒号(我不确定是否需要在那里),整个结构是一个3级词典。如果需要,我可以更改YML以提高效率。
现在,我想快速迭代结构,并根据我找到的叶级元素(例如'菠菜'),我想查找另一个简单的dict,称为'recipes',它可以有字符串'菠菜'作为其键的子串。这个查找字典可以有“菠菜汁”或“菠菜馅饼”或“鸡肉菠菜”的钥匙。
我找到了一种方法来做到这一点,但不确定它是否是正确的pythonic方式。这就是我所拥有的:
for food_class in database['nutrition']:
for food in database['nutrition'][food_class]:
for key, value in recipes.items():
if re.search(food, key):
print key
任何建议/指示使其更高效和/或pythonic?
答案 0 :(得分:2)
您可以使用dict.items()
,因此您无需将字典查找放在嵌套循环中。
食物不是正则表达式,只是字符串,因此请使用in
而不是re.search()
。
由于您未使用value
中的recipe
,因此您不需要.items()
for food_class, foods in database['nutrition'].items():
for food in foods:
for key in recipes:
if food in key:
print(key)
如果您想整体搜索食物,可以使用re.search(r'\b' + food + r'\b', key)
或food in recipes.split(' ')
作为测试。