我是python的新手,需要帮助。
我得到了一个字典。
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': 'Сноубординг'
}
}
}
这些是路径。我需要循环每个dict元素并获取所有嵌套键。我期待得到阵列。
我试过这种方式:
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
等每个嵌套键
谢谢
答案 0 :(得分: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']