如何优雅实现字典中各列表内所有整数的乘法操作?
字典列表元素批量乘整数的优雅实现
针对你提出的需求,这里有两种简洁优雅的实现方式,同时先解释下你给出的代码无效的原因:
为什么之前的代码无效?
- 第一段代码:Python的整数是不可变类型,循环里的
i是列表元素的临时副本,i *=3只是生成了新的整数对象,并不会修改原列表中的元素,因此字典里的列表完全没变化。 - 第二段代码:
val = [val[s]*2/3 ...]是给循环内的局部变量val赋值了新列表,但字典中存储的是原列表的引用,这个操作不会更新字典里的内容。 - 第三段代码:逻辑可行但写法冗余,重复访问
mydict[key],且循环变量命名容易造成误解,不够直观。
优雅实现方式
方式1:原地修改原列表(保留原字典结构)
如果需要直接修改原字典中的列表,不需要生成新字典,可以用这种方式:
mydict = {'a':[1,2,3],'b':[3,4,5],'c':[8,7,6]} multiplier = 3 # 你需要的乘数 for lst in mydict.values(): for idx in range(len(lst)): lst[idx] *= multiplier
列表是可变类型,直接通过索引修改元素会同步更新字典中的列表内容,效率高且代码简洁。
方式2:字典推导式生成新字典(更简洁)
如果可以生成新字典替代原字典,用字典推导式一行就能搞定:
mydict = {'a':[1,2,3],'b':[3,4,5],'c':[8,7,6]} multiplier = 3 mydict = {key: [num * multiplier for num in lst] for key, lst in mydict.items()}
这种写法可读性强,逻辑清晰,是Pythonic的实现方式。
内容的提问来源于stack exchange,提问作者Lilly
相关产品推荐
相关产品推荐

