You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将城市对象列表转换为按州分组的字典?解决值覆盖问题

解决城市列表按州分组的问题

嗨,这个问题我太熟了!你之前的代码之所以只保留每个州的最后一个城市,是因为字典的键是唯一的——每次遇到同一个州的城市,新的x.name都会直接覆盖掉之前的值,自然就只剩最后一个啦。下面给你几种最优的实现方式,按实用性排序:

方法一:用collections.defaultdict(最推荐)

这是Python处理这类分组问题最常用的方案,代码简洁又高效,还不用手动判断键是否存在:

from collections import defaultdict

state_cities = defaultdict(list)
for city_obj in objectList:
    state_cities[city_obj.state].append(city_obj.name)

defaultdict会自动为不存在的键创建一个空列表,你只需要循环每个城市对象,把城市名追加到对应州的列表里就行,省心又省力。

方法二:用普通字典+setdefault(无需额外导入)

如果不想导入模块,用原生字典的setdefault方法也能搞定:

state_cities = {}
for city_obj in objectList:
    state_cities.setdefault(city_obj.state, []).append(city_obj.name)

setdefault的作用是:如果键不存在,就把键和默认值(这里是空列表)加入字典,然后返回这个默认值;如果键已经存在,就直接返回对应的值。这样我们就能直接对返回的列表执行append操作啦。

效率对比

  • 当处理大量数据时,defaultdict的性能会略优于setdefault,因为它内部少了一次键的存在性检查。
  • 两种方法的时间复杂度都是O(n),n是你的城市对象数量,属于最优的时间复杂度。

内容的提问来源于stack exchange,提问作者jp3434

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:55:44