Python 3中字典内可迭代对象的含义及'int object is not iterable'错误解析
Python字典中的可迭代对象与extend()报错分析
一、Python 3字典中的可迭代对象是什么?
在Python里,可迭代对象指的是任何能返回迭代器、可以被for循环遍历的对象——比如列表、元组、字符串、集合都是典型的可迭代对象。
放到字典的场景里,有几个不同的可迭代场景:
- 直接迭代字典本身(比如
for key in d:):默认迭代的是字典的键(keys),这时候字典的键序列就是可迭代对象; - 用
d.values()迭代:会遍历字典的所有值(values),如果值本身是可迭代类型(比如你的例子里的列表[1,4]),那这个值也是独立的可迭代对象; - 用
d.items()迭代:会遍历字典的所有键值对(key-value pairs),每个键值对是一个元组,这整个键值对序列也是可迭代对象。
简单总结:字典本身、它的键集合、值集合、键值对集合都是可迭代对象;而字典里单个值如果是可迭代类型(比如列表、字符串),也属于可迭代对象范畴。
二、你的程序报错原因分析
先看你的代码:
d={'a':[1,4]} d['a'].extend(34)
报错提示“int对象不可迭代”,问题出在extend()方法的使用逻辑上:
list.extend()方法要求接收一个可迭代对象作为参数,它会把这个可迭代对象里的每一个元素逐个添加到列表末尾。但你传的参数是34——这是一个整数(int类型),整数不属于可迭代对象(你没法用for num in 34:这种循环去遍历它的元素),所以Python会抛出这个错误。
如何修正?
有两种常见的解决方式:
- 如果想把34作为单个元素添加到列表,用
append()方法(它专门用来添加单个元素):d['a'].append(34) # 执行后:d['a']变成 [1,4,34] - 如果一定要用
extend(),就把34放进一个可迭代对象里(比如列表、元组):d['a'].extend([34]) # 用列表包裹 # 或者 d['a'].extend((34,)) # 用元组包裹 # 执行后同样得到 [1,4,34]
内容的提问来源于stack exchange,提问作者GursimranSe
相关产品推荐
相关产品推荐

