为何final_dictionary = starting_dictionary["c"]=7未按预期赋值?两种代码差异解析
两段Python字典操作代码的差异解析
一、执行结果差异
代码(1)的输出
{'a': 9, 'b': 8, 'c': 7} 7
代码(2)的输出
{'a': 9, 'b': 8, 'c': 7} {'a': 9, 'b': 8, 'c': 7}
二、核心疑问解析:代码(1)为何不符合预期逻辑?
你预期final_dictionary会成为包含新增键值对的字典,但问题出在这行链式赋值代码:
final_dictionary = starting_dictionary["c"] = 7
Python的链式赋值是从右往左执行的:
- 第一步执行
starting_dictionary["c"] = 7:这部分确实给starting_dictionary新增了键值对"c":7,符合你预期的第一步。 - 第二步,将这个赋值表达式的返回值赋值给
final_dictionary。而Python中赋值表达式的返回值是被赋予的具体值(也就是7),不是字典对象,所以final_dictionary最终是整数7,而非你期望的字典。
如果要实现你预期的逻辑,需要把这行拆成两行:
starting_dictionary["c"] = 7 final_dictionary = starting_dictionary
这就和代码(2)的逻辑完全一致了。
内容的提问来源于stack exchange,提问作者Vyagh
相关产品推荐
相关产品推荐

