迭代此字典结构的 pythonic 方法
pythonic way to iterate over this dict structure
我的结构在 YAML 文件中是这样的:
nutrition:
fruits:
apple:
banana:
pear:
veggies:
spinach:
zucchini:
squash:
meats:
chicken:
fish:
ham:
我用 yaml.load()
加载它
不确定,但可能是因为叶元素末尾的冒号(我不确定是否需要存在),整个结构是一个 3 级字典。如果需要,我可以更改 YML 以提高效率。
现在,我想快速迭代结构,并根据我找到的叶级元素(例如 'spinach'),我想查找另一个简单的字典,称为 'recipes' ,它可以将字符串 'spinach' 作为其键的 substring。这个查找字典可以有表示 'spinach juice' 或 'spinach pie' 或 'chicken spinach'.
的键
我找到了一种方法来做到这一点,但不确定这是正确的 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
任何 advice/pointers 使其更高效 and/or pythonic?
您可以使用 dict.items()
这样您就不需要将字典查找放在嵌套循环中。
食物不是正则表达式,只是字符串,所以使用 in
而不是 re.search()
。
由于您没有使用 recipe
中的 value
,因此不需要 .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(' ')
作为测试。
我的结构在 YAML 文件中是这样的:
nutrition:
fruits:
apple:
banana:
pear:
veggies:
spinach:
zucchini:
squash:
meats:
chicken:
fish:
ham:
我用 yaml.load()
加载它不确定,但可能是因为叶元素末尾的冒号(我不确定是否需要存在),整个结构是一个 3 级字典。如果需要,我可以更改 YML 以提高效率。
现在,我想快速迭代结构,并根据我找到的叶级元素(例如 'spinach'),我想查找另一个简单的字典,称为 'recipes' ,它可以将字符串 'spinach' 作为其键的 substring。这个查找字典可以有表示 'spinach juice' 或 'spinach pie' 或 'chicken spinach'.
的键我找到了一种方法来做到这一点,但不确定这是正确的 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
任何 advice/pointers 使其更高效 and/or pythonic?
您可以使用 dict.items()
这样您就不需要将字典查找放在嵌套循环中。
食物不是正则表达式,只是字符串,所以使用 in
而不是 re.search()
。
由于您没有使用 recipe
中的 value
,因此不需要 .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(' ')
作为测试。