如何为字典中元组值的指定整数元素累加值(不使用列表)
问题描述
现有字典:
{'bob': (1, 'bob'), 'alicia': (3, 'alicia')}
需要为键'bob'对应值的第0位整数元素加1,得到结果:
{'bob': (2, 'bob'), 'alicia': (3, 'alicia')}
尝试了以下代码但报错'tuple' object does not support item assignment,且不想用列表作为字典的值,求解决方法:
list1 = ['bob', 'alicia', 'bob'] d = {} for i in list1: if i not in d: d = 1, i else: d += 1, i
解决方案
1. 直接修改已有字典的目标键值
元组是不可变类型,无法直接修改内部元素,所以需要生成新的元组替换原有的键值:
# 假设已有目标字典 d = {'bob': (1, 'bob'), 'alicia': (3, 'alicia')} # 重新生成元组并赋值给'bob'键 d['bob'] = (d['bob'][0] + 1, d['bob'][1])
执行后字典就会更新为目标结果。
2. 修正从列表生成统计字典的代码
你原代码的问题是把字典d直接赋值成了元组(d = 1, i),而非给字典的键赋值。正确的统计写法应该是:
list1 = ['bob', 'alicia', 'bob'] d = {} for name in list1: if name not in d: # 给字典的name键赋值为(计数, 名字)元组 d[name] = (1, name) else: # 取出原元组的计数和名字,生成新元组赋值 count, current_name = d[name] d[name] = (count + 1, current_name)
执行后d就是{'bob': (2, 'bob'), 'alicia': (1, 'alicia')},符合统计需求且用元组作为值。
内容的提问来源于stack exchange,提问作者Alba
相关产品推荐
相关产品推荐

