繁体   English   中英

遍历此dict结构的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()加载它

不确定但很可能是由于叶元素末尾的冒号(我不确定是否需要在那里),所以整个结构是一个三级字典。 如果需要提高效率,我可以更改YML。

现在,我想快速遍历该结构,并根据找到的叶级元素(例如“菠菜”),查找另一个简单的字典,称为“食谱”,其中可以包含字符串“ 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

有什么建议/指针可以使其更高效和/或更Python化吗?

您可以使用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(' ')中的food in recipes.split(' ')作为测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM