用pythonic方法迭代这个dict结构

2024-05-19 19:17:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在YAML文件中,我的结构是这样的:

nutrition: 
  fruits: 
    apple: 
    banana: 
    pear: 
  veggies: 
    spinach: 
    zucchini:
    squash:
  meats:
    chicken:
    fish:
    ham:

我把这个装进去yaml.负载()

不确定,但可能是因为叶元素末尾的冒号(我不确定是否需要),整个结构是一个3级dict。如果需要,我可以更改YML以提高效率。你知道吗

现在,我想快速遍历这个结构,根据我找到的叶级元素(例如“spinach”),我想查找另一个简单的dict,称为“recipes”,它可以将字符串“spinach”作为其键的子字符串。这个查找字典可以有“菠菜汁”、“菠菜派”或“鸡肉菠菜”的键。你知道吗

我找到了一个方法,但不确定这是正确的Python方法。以下是我所拥有的:

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

有什么建议/建议让它更有效和/或更具吸引力吗?你知道吗


Tags: 方法key字符串in元素forfood结构
1条回答
网友
1楼 · 发布于 2024-05-19 19:17:57

您可以使用dict.items(),这样就不需要将字典查找放在嵌套循环中。你知道吗

食物不是正则表达式,只是字符串,所以使用in而不是re.search()。你知道吗

因为您没有使用来自recipevalue,所以不需要.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(' ')作为测试。你知道吗

相关问题 更多 >