为何dict.update(key=val)无法使用key变量引用的字符串?
问题分析与解决方法
嘿,这个问题我刚学Python的时候也踩过一模一样的坑!咱们来一步步拆解清楚:
你的错误根源
当你写new_dict.update(key=val)时,这里的key是Python关键字参数的固定名称,它会被当作字面量字符串'key'处理,而不是你循环里的变量key的值。所以每次循环你其实都在给new_dict里的'key'键重复赋值,最后一次循环val是2,自然就得到{'key': 2}了。
正确的实现方式
有几种简单的方法可以达到你的预期:
方法1:用字典字面量传递键值对
把循环中的键值对包装成一个小字典传给update():
my_dict = {'a': 1, 'b': 2} new_dict = {} for key, val in my_dict.items(): new_dict.update({key: val}) # 此时 new_dict 是 {'a': 1, 'b': 2}
方法2:直接键赋值(更直观)
不用update(),直接通过键来赋值,代码更简洁易懂:
my_dict = {'a': 1, 'b': 2} new_dict = {} for key, val in my_dict.items(): new_dict[key] = val
方法3:批量更新(最高效)
其实如果你的需求是把my_dict的所有键值对都复制到new_dict里,根本不需要循环,直接给update()传入整个字典就行,这是Python官方推荐的高效写法:
my_dict = {'a': 1, 'b': 2} new_dict = {} new_dict.update(my_dict)
这样就能精准得到你期望的{'a': 1, 'b': 2}啦!
内容的提问来源于stack exchange,提问作者Bjarne Thorsted
相关产品推荐
相关产品推荐

