如何在Python字典中为单个键设置多个值?含字符排序场景
嘿,这个场景我太熟悉啦——你要的其实是让字典的每个键对应一个列表,这样就能把所有同组的原始字符串都存进去!之前直接赋值或者调用append失败,是因为一开始键对应的不是列表,自然没法直接追加元素。下面给你三种实用的实现方式,挑你喜欢的来用:
方法1:手动检查并初始化列表
这是最基础的写法,逻辑清晰,适合刚接触字典的朋友:
words = ["flow", "wolf", "listen", "silent", "apple"] anagram_dict = {} for word in words: # 把字符串排序后转成字符串当键(列表不能做字典键,必须转成可哈希的类型) sorted_key = ''.join(sorted(word)) # 如果键不存在,先初始化一个空列表 if sorted_key not in anagram_dict: anagram_dict[sorted_key] = [] # 把原始字符串追加到对应列表里 anagram_dict[sorted_key].append(word) print(anagram_dict) # 输出结果: # {'flow': ['flow', 'wolf'], 'eilnst': ['listen', 'silent'], 'aelpp': ['apple']}
方法2:用collections.defaultdict(最省心)
Python标准库的collections模块里有个defaultdict,能帮你自动处理“键不存在时初始化默认值”的问题,代码会简洁很多:
from collections import defaultdict words = ["flow", "wolf", "listen", "silent", "apple"] # 指定默认值类型为列表 anagram_dict = defaultdict(list) for word in words: sorted_key = ''.join(sorted(word)) # 直接append就行,键不存在时会自动创建空列表 anagram_dict[sorted_key].append(word) # 如果需要转成普通字典(不是必须,defaultdict本身也能正常用) print(dict(anagram_dict))
方法3:用dict.setdefault()(一行式简洁写法)
字典自带的setdefault()方法可以一步完成“检查键是否存在→不存在则设置默认值→返回对应值”的操作,适合追求代码简洁的场景:
words = ["flow", "wolf", "listen", "silent", "apple"] anagram_dict = {} for word in words: sorted_key = ''.join(sorted(word)) # 一行搞定初始化+追加 anagram_dict.setdefault(sorted_key, []).append(word) print(anagram_dict)
小提醒
为什么要用''.join(sorted(word))当键?因为sorted(word)返回的是字符列表,而列表是不可哈希的,不能作为字典的键;转成字符串后就变成了可哈希类型,才能正常当作键来用。
内容的提问来源于stack exchange,提问作者mourinho
相关产品推荐
相关产品推荐

