如何从指定字典中提取各城市对应的标签(Key)及对应分数?
解决方案:转换城市-标签分数映射字典
这里有个实用的Python实现方案,能帮你把给定的嵌套字典转换成以城市为键、对应所有标签及分数的结构:
代码实现
# 原始输入字典 dictionary = { u'adrenaline': { u'estimated_total': 234, u'more': True, u'results': [ {u'adrenaline_score': 2.11474252688113, u'name': u'Rome'}, {u'adrenaline_score': 1.94859310493828, u'name': u'Budapest'}, {u'adrenaline_score': 2.65914794847249, u'name': u'Ubud'}, {u'adrenaline_score': 1.94859310493828, u'name': u'Calgary'}, {u'adrenaline_score': 3.0, u'name': u'Cancún'} ] }, u'air': { u'estimated_total': 234, u'more': True, u'results': [ {u'air_score': 1.50402325242855, u'name': u'Paris'}, {u'air_score': 1.50402325242855, u'name': u'Rome'}, {u'air_score': 1.50402325242855, u'name': u'New York City'}, {u'air_score': 1.50402325242855, u'name': u'Abu Dhabi'}, {u'air_score': 1.50402325242855, u'name': u'Key West'}, {u'air_score': 1.50402325242855, u'name': u'Salt Lake City'} ] } } # 初始化结果字典 city_scores = {} # 遍历每个标签类别 for category, category_data in dictionary.items(): # 处理该类别下的所有城市结果 for city_result in category_data['results']: city_name = city_result['name'] # 提取分数对应的键(比如'adrenaline_score') score_key = next(key for key in city_result if key.endswith('_score')) score_value = city_result[score_key] # 如果城市还没在结果字典里,先创建空字典 if city_name not in city_scores: city_scores[city_name] = {} # 添加当前标签和分数 city_scores[city_name][category] = score_value # 输出最终结果 print(city_scores)
代码说明
- 我们先初始化一个空的
city_scores字典,用来存放最终的城市-标签分数映射。 - 外层循环遍历原始字典中的每个标签类别(比如
adrenaline、air),拿到对应的数据集合。 - 内层循环处理每个类别下的城市结果,提取城市名和对应的分数:通过
endswith('_score')匹配分数键,确保即使后续新增其他标签类别,代码也能兼容。 - 检查城市是否已存在于结果字典中,不存在则创建空字典,再将当前标签和分数添加进去。
运行结果
执行代码后会得到你期望的格式:
{ 'Rome': {'adrenaline': 2.11474252688113, 'air': 1.50402325242855}, 'Budapest': {'adrenaline': 1.94859310493828}, 'Ubud': {'adrenaline': 2.65914794847249}, 'Calgary': {'adrenaline': 1.94859310493828}, 'Cancún': {'adrenaline': 3.0}, 'Paris': {'air': 1.50402325242855}, 'New York City': {'air': 1.50402325242855}, 'Abu Dhabi': {'air': 1.50402325242855}, 'Key West': {'air': 1.50402325242855}, 'Salt Lake City': {'air': 1.50402325242855} }
内容的提问来源于stack exchange,提问作者Ajay Shewale
相关产品推荐
相关产品推荐

