2017-02-25 77 views
-1

我是新來的蟒蛇,需要幫助。蟒蛇字典循環與所有父鍵

我得到了一個字典。

categories = { 
     'Private_Life': { 
      'Shopping': { 
       'Shopping': 'Торгово-развлекательные центры', 
       'Cleaning_Agents': 'Хозтовары, бытовая химия', 
       'Clothing_footwear': 'Одежда, обувь, аксессуары', 
       'Domestic_Appliances': 'Бытовая техника', 
       'Consumer_Electronics': 'Аудио-, видео-, фототехника', 
       'Tools': 'Инструменты', 
       'General': 'Универсальное', 
       'Other': 'Прочее', 
      }, 
      'Cooking': { 
       'Grocery_stores': 'Продуктивные магазины', 
       'Tobacco': 'Табак', 
       'Soft_drinks': 'Безалкогольные напитки' 
      }, 
      'Holidays': { 
       'Gifts': 'Подарки', 
       'February23': { 
        'Gifts': 'Подарки' 
       }, 
       'Fancy_dress': 'Карнавальные костюмы', 
       'Firework': 'Фейерверки' 
      }, 
      'Beauty': { 
       'Perfumery': 'Парфюмерия', 
       'Jewelry': 'Украшения', 
       'Make_up': 'Косметика' 
      }, 
      'Other': 'Прочее' 
     }, 
     'Automobiles': { 
      'Parts': { 
       'Online_shops': 'Интернет магазины', 
       'Tyres': 'Шины и диски', 
       'Spare_Parts': 'Автозапчасти', 
       'Chemicals': 'Автохимия и автокосметика', 
       'Car_Navigators': 'Автонавигаторы' 
      } 
     }, 
     'Sports': { 
      'Shopping': { 
       'Sports_feed': 'Спортивное питание', 
       'Sports_shops': 'Спортивные магазины', 
       'Skis_snowboards': 'Лыжи, сноуборды', 
       'Sportswear': 'Спортивная одежда, обувь', 
       'Rollers,_skateboards': 'Ролики, скейтборды', 
       'Bicycles': 'Велосипеды', 
       'Simulators': 'Тренажоры' 
      }, 
      'Summer': { 
       'Bikes': 'Велосипеды', 
       'Shoot': 'Стрельба', 
       'Ping_pong': 'Настольный теннис' 
      }, 
      'Extreme': { 
       'Rollers': 'Роллерспорт и скейтбординг', 
       'Snowboarding': 'Сноубординг' 
      } 
     } 
    } 

那些是路徑。我需要循環每個字典元素並獲取所有嵌套的鍵。我期待得到數組。

我試着這樣說:

def get_category_paths(self, categories): 
     result = [] 

     for key, value in categories.items(): 
      path = key 

      if isinstance(value, dict): 
       path += '/' 
       path += self.get_category_path(value) 

       return path 

      result.append(self.host + path + self.query_parameters) 

     return result 

但是那是錯誤的。

那是什麼即時試圖讓: Private_Life /購物/購物 Private_Life /購物/ Cleaning_Agents

等由每個嵌套鍵

謝謝

回答

3

你的遞歸處於關閉狀態。您共享的代碼不完整,因此無法在此幫助。

但是,這是你可以做什麼讓你在找什麼:

def get_all_keys(dict_item, key_base=''): 
    all_paths = [] 
    if isinstance(dict_item, dict): 
     for key in dict_item: 
      if key_base: 
       new_key = key_base + "/" + key 
      else: 
       new_key = key 
      all_paths.extend(get_all_keys(dict_item[key], new_key)) 
    else: 
     if key_base: 
      all_paths.append(key_base) 
    return all_paths 

get_all_keys(categories) 

輸出:

['Automobiles/Parts/Spare_Parts', 
'Automobiles/Parts/Chemicals', 
'Automobiles/Parts/Car_Navigators', 
'Automobiles/Parts/Tyres', 
'Automobiles/Parts/Online_shops', 
'Private_Life/Holidays/Gifts', 
'Private_Life/Holidays/February23/Gifts', 
'Private_Life/Holidays/Firework', 
'Private_Life/Holidays/Fancy_dress', 
'Private_Life/Shopping/Tools', 
'Private_Life/Shopping/Cleaning_Agents', 
'Private_Life/Shopping/Clothing_footwear', 
'Private_Life/Shopping/Domestic_Appliances', 
'Private_Life/Shopping/Shopping', 
'Private_Life/Shopping/General', 
'Private_Life/Shopping/Consumer_Electronics', 
'Private_Life/Shopping/Other', 
'Private_Life/Cooking/Soft_drinks', 
'Private_Life/Cooking/Grocery_stores', 
'Private_Life/Cooking/Tobacco', 
'Private_Life/Other', 
'Private_Life/Beauty/Make_up', 
'Private_Life/Beauty/Jewelry', 
'Private_Life/Beauty/Perfumery', 
'Sports/Extreme/Snowboarding', 
'Sports/Extreme/Rollers', 
'Sports/Summer/Ping_pong', 
'Sports/Summer/Bikes', 
'Sports/Summer/Shoot', 
'Sports/Shopping/Sportswear', 
'Sports/Shopping/Sports_shops', 
'Sports/Shopping/Skis_snowboards', 
'Sports/Shopping/Rollers,_skateboards', 
'Sports/Shopping/Sports_feed', 
'Sports/Shopping/Simulators', 
'Sports/Shopping/Bicycles']