簡體   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