如何正确向Python字典中的列表添加元素?(解决append赋值后值为None的问题)
问题:字典中的列表append后变成了None,如何正确添加元素?
你遇到的问题其实是Python列表append()方法的特性导致的——append()是原地修改列表,它的返回值是None。
看你的代码:
dic["t"] = dic["t"].append({"x": 3})
这里你把append()的返回值(也就是None)重新赋值给了dic["t"],自然就覆盖了原来的列表,最后得到{'t': None}。
正确的实现方法有两种:
- 直接调用append,不赋值(推荐,原地修改更高效):
dic = {"t": [{"x": 0}, {"x": 1}, {"x": 2}]} print(dic) dic["t"].append({"x": 3}) # 直接修改原列表,不需要赋值 print(dic)
运行后就能得到你期望的结果:{'t': [{'x': 0}, {'x': 1}, {'x': 2}, {'x': 3}]}
- 用+运算符创建新列表再赋值(适合需要保留原列表的场景):
如果不想修改原列表,而是生成新列表再赋值,可以这样写:
dic = {"t": [{"x": 0}, {"x": 1}, {"x": 2}]} print(dic) dic["t"] = dic["t"] + [{"x": 3}] # 生成新列表并赋值 print(dic)
这种方式会创建新列表,原列表不会被修改,但效率比append()低,因为要复制整个列表。
补充说明:
Python中很多可变对象的方法都是原地修改并返回None,比如列表的sort()、extend(),字典的update()等,目的是提醒你它们直接修改原对象,而非返回新对象。以后遇到类似"变成None"的问题,可以先检查是不是把这类方法的返回值赋值给了变量~
内容的提问来源于stack exchange,提问作者william waterhouse
相关产品推荐
相关产品推荐

