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

Python字典:为指定键添加值的其他实现方式有哪些?

为字典指定键添加值的替代实现方式

现有Python代码将包含作者与作品的列表转换为以作者为键、作品集合为值的字典,具体代码如下:

lst_in=['Пушкин: Сказака о рыбаке и рыбке', 'Есенин: Письмо к женщине', 'Тургенев: Муму', 'Пушкин: Евгений Онегин', 'Есенин: Русь']
D = [(L.split(": ")[0], L.split(": ")[1]) for L in lst_in]
print(D)
d = {}
for i in D:
    x,y = i[0],i[1]
    if x not in d:
        d[x] = {y}
    else:
        d[x].add(y)

请问是否存在其他为字典指定键添加值的实现方式?

当然有,以下是几种更简洁的实现方式:

1. 使用collections.defaultdict

这是处理这类分组场景最常用的简化方案,defaultdict会自动为不存在的键创建指定类型的默认值(这里是set),省去手动判断键是否存在的步骤:

from collections import defaultdict

lst_in=['Пушкин: Сказака о рыбаке и рыбке', 'Есенин: Письмо к женщине', 'Тургенев: Муму', 'Пушкин: Евгений Онегин', 'Есенин: Русь']
author_works = defaultdict(set)
for entry in lst_in:
    author, work = entry.split(": ")
    author_works[author].add(work)

# 若需要转为普通字典,可执行:author_works = dict(author_works)

2. 使用dict.setdefault()

setdefault方法会返回指定键对应的值;如果键不存在,会先将键与指定的默认值关联,再返回这个默认值。利用这个特性可以简化判断逻辑:

lst_in=['Пушкин: Сказака о рыбаке и рыбке', 'Есенин: Письмо к женщине', 'Тургенев: Муму', 'Пушкин: Евгений Онегин', 'Есенин: Русь']
author_works = {}
for entry in lst_in:
    author, work = entry.split(": ")
    author_works.setdefault(author, set()).add(work)

3. 使用itertools.groupby(需先排序)

groupby可以对序列中的连续相同键进行分组,不过要注意必须先按作者对列表排序,否则无法正确分组:

from itertools import groupby

lst_in=['Пушкин: Сказака о рыбаке и рыбке', 'Есенин: Письмо к женщине', 'Тургенев: Муму', 'Пушкин: Евгений Онегин', 'Есенин: Русь']
# 先按作者排序,确保相同作者的条目连续
sorted_entries = sorted(lst_in, key=lambda x: x.split(": ")[0])
author_works = {}
for author, group in groupby(sorted_entries, key=lambda x: x.split(": ")[0]):
    # 从分组中提取所有作品,转为集合
    author_works[author] = {entry.split(": ")[1] for entry in group}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:45:32