如何对列表中的嵌套字典按Price排序并获取最小值条目?
解决嵌套字典列表的Price排序与最小值提取
首先先明确你的原始数据结构:
data = [ {'USA': [{'accommodations': '2 BR ','Price': 1245}, {'accommodations': '5 BR ','Price': 1045}]}, {'Dubai': [{'accommodations': '2 BR | Sleeps 6','Price': 966}, {'accommodations': '5 BR | Sleeps 6','Price': 800}]} ]
你提到的普通sorted写法没法直接用,核心原因是你的数据是外层列表包裹着单个键值对的字典,每个字典的键是地区名,值才是包含Price的住宿列表——所以得先拆解这个嵌套结构,针对每个地区的住宿数据单独处理。
解决方案思路
- 遍历外层列表里的每个地区字典
- 对每个地区对应的住宿列表,直接用
min()函数(比先排序再取第一个更高效)按Price字段筛选出最小值条目 - 把地区名(转成小写,匹配你的预期格式)和最小Price条目重新组织成目标结构
完整代码实现
result = [] for region_dict in data: # 快速取出地区名和对应的住宿列表(每个字典只有一个键值对,用next()+iter()高效获取) region, stays = next(iter(region_dict.items())) # 找出该地区Price最低的住宿条目 cheapest_stay = min(stays, key=lambda x: x['Price']) # 按预期格式添加到结果列表 result.append({region.lower(): cheapest_stay}) # 打印结果 print(result)
运行结果
[ {'usa': {'accommodations': '5 BR ', 'Price': 1045}}, {'dubai': {'accommodations': '5 BR | Sleeps 6', 'Price': 800}} ]
关键细节解释
next(iter(region_dict.items())):因为每个地区字典只有一个键(比如'USA'),这个方法可以跳过遍历,直接拿到地区名和对应的住宿列表,代码更简洁高效。min(stays, key=lambda x: x['Price']):直接在住宿列表中定位Price最小的元素,逻辑比先sorted再取[0]更直观,性能也更好(不需要对整个列表排序)。- 如果不需要把地区名转成小写,只需要把
region.lower()改成region即可。
内容的提问来源于stack exchange,提问作者Ajay Shewale
相关产品推荐
相关产品推荐

