编程与 AI12 分钟阅读更新于 2026-07-15

Python 列表和字典怎么选:查询、去重、分组和性能差异

用常见数据处理任务讲清 list、dict、set 的选择:什么时候用列表遍历,什么时候用字典索引,什么时候用集合去重。

相关工具

不是谁更高级,而是谁更适合

列表和字典没有绝对好坏。列表适合保留顺序、逐条遍历、保存一批同类数据;字典适合按 key 快速查找、做映射、做分组统计;集合适合去重和判断存在。选择数据结构,本质是看你后面要做什么操作。

如果你只是把一批文章按顺序展示,用列表就行。如果你要根据 slug 快速找到某篇文章,用字典更合适。如果你要判断某个关键词是否已经出现过,用集合更直接。

比如把文章列表转成按 slug 查询的字典:

python代码示例
articles = [
    {"slug": "python-list", "title": "Python 列表"},
    {"slug": "python-dict", "title": "Python 字典"},
]

article_map = {item["slug"]: item for item in articles}
print(article_map["python-dict"]["title"])

大量查询时不要反复遍历列表

如果只有几十条数据,列表遍历没有什么问题。但如果你有几万条记录,并且要反复按 ID 查找,列表每次都从头找就会变慢。更好的做法是先建立字典索引,再按 key 查询。

对比写法:

python代码示例
users = [
    {"id": 1, "name": "张三"},
    {"id": 2, "name": "李四"},
]

user_map = {user["id"]: user for user in users}

target = user_map.get(2)
print(target)

这类思路在 CSV 合并、订单匹配、用户资料补全里很常见。先把小表或常查表做成字典,再遍历主表补字段,会比双层循环清楚很多。

分组统计适合用字典

做统计时,字典非常好用。比如统计每个分类有多少篇文章、每个城市有多少用户、每种状态有多少订单。key 是分类或状态,value 是数量或列表。

示例:

python代码示例
orders = [
    {"status": "paid", "amount": 99},
    {"status": "pending", "amount": 49},
    {"status": "paid", "amount": 199},
]

count_by_status = {}
for order in orders:
    status = order["status"]
    count_by_status[status] = count_by_status.get(status, 0) + 1

print(count_by_status)

如果要保存每组的明细,value 可以是列表。比如按分类把文章分组,按用户 ID 把订单分组。这比创建很多变量更清楚。

去重用集合,但要注意顺序

集合适合快速去重,但普通集合不强调顺序。如果你只想知道有哪些不同关键词,用 set 很方便;如果你想去重后仍保留首次出现顺序,可以用一个 seen 集合配合结果列表。

保留顺序去重:

python代码示例
items = ["JSON", "Python", "JSON", "CSV", "Python"]

seen = set()
result = []
for item in items:
    if item in seen:
        continue
    seen.add(item)
    result.append(item)

print(result)

性能优化不用一开始就想得很重。先把逻辑写对,数据量变大、速度明显慢时,再看是不是列表查询、双层循环、重复解析文件造成的问题。

常见问题

列表查询一定很慢吗?

小数据量没问题。大量数据并且反复按 key 查找时,建议先建字典索引。

字典会不会打乱顺序?

现代 Python 字典会保留插入顺序,但它的主要价值仍然是按 key 查询。

去重后要保留顺序怎么办?

用 seen 集合判断重复,同时用列表保存结果。

Python 实用

继续阅读

返回专题