Python字典为何未保留重复键的键值对?问题咨询
为什么Python字典无法保留重复键的多个值?
先看你给出的代码:
capacity = [10,2,2] rocks = [2,2,0] a=100 bags= {c:r for (c,r) in zip(capacity,rocks)} print(bags) # 输出结果: # {10: 2, 2: 0}
问题的核心原因是:Python字典的键具有唯一性。当你用字典推导式创建字典时,如果遇到重复的键,后出现的键值对会直接覆盖之前的。
在你的例子里,capacity列表中有两个2,对应的键值对分别是(2, 2)和(2, 0)。当字典推导式处理到第二个2时,会把第一个2对应的2替换成0,所以最终字典里只保留了最后一次出现的键值对2: 0。
如果你需要为同一个键存储多个值,不能直接用普通字典,而是需要把值设为列表类型,比如可以这样实现:
方法1:用普通字典手动处理
capacity = [10,2,2] rocks = [2,2,0] bags = {} for c, r in zip(capacity, rocks): # 键已存在就追加值到列表,不存在则创建新列表 if c in bags: bags[c].append(r) else: bags[c] = [r] print(bags) # 输出:{10: [2], 2: [2, 0]}
方法2:用collections.defaultdict简化代码
from collections import defaultdict capacity = [10,2,2] rocks = [2,2,0] bags = defaultdict(list) for c, r in zip(capacity, rocks): bags[c].append(r) # 转换为普通字典输出 print(dict(bags)) # 输出:{10: [2], 2: [2, 0]}
内容的提问来源于stack exchange,提问作者Harish Sainath
相关产品推荐
相关产品推荐

