在Python中向列表添加字典时,append()与+=为何结果不同?
为什么
travel_log += germany和travel_log.append(germany)结果不同? 先看你给出的代码示例:
travel_log = [ { "country": "France", "visits": 12, "cities": ["Paris", "Lille", "Dijon"] }] germany = { "country": "Germany", "visits": 5, "cities": ["Berlin", "Hamburg", "Stuttgart"] }
两种操作的本质差异:
+=操作的逻辑
Python中列表的+=运算符会把右侧的对象当成可迭代对象,逐个取出里面的元素添加到列表中。而字典默认的迭代对象是它的键(keys),所以travel_log += germany相当于把germany的三个键'country'、'visits'、'cities'分别添加到了列表末尾,自然看不到对应的值。
如果想用+=实现正确添加字典的效果,需要把字典包装成单元素的可迭代对象,比如:
travel_log += [germany]
这样迭代时会把整个字典作为一个元素加入列表,结果就和append一致了。
append()方法的逻辑
列表的append()方法的核心就是把传入的参数作为一个完整元素直接追加到列表末尾。不管参数是字典、列表还是其他类型,都会被当作单个元素存入列表,所以travel_log.append(germany)会把整个germany字典作为列表的第二个元素,得到你预期的正确结果。
内容的提问来源于stack exchange,提问作者Carmel Saltern
相关产品推荐
相关产品推荐

