为什么遍历defaultdict的values得到的仍是list类型?
关于defaultdict.values()遍历结果的疑问解答
核心误解在于你以为dd.values()会返回所有元素的扁平化列表,但实际上它返回的是字典中每个键对应的值的集合——在你的代码里,每个键的值本身就是list类型,所以遍历dd.values()拿到的是完整的列表对象。
具体拆解:
- 你用
defaultdict(list)创建的字典,每个键对应的值默认是列表。你给键'a'追加了1和2,所以dd['a']本身就是[1,2]这个列表。 dd.values()在Python3中返回的是dict_values视图对象,它存储的是字典里每个键对应的完整值,也就是这里的[1,2],而不是把所有值拆成单个元素拼接成的新列表。- 所以遍历这个视图时,每次循环的
d就是对应键的完整值,也就是那个列表[1,2],而不是单个的1或2。
如果要遍历所有单个元素,需要嵌套遍历:
from collections import defaultdict dd = defaultdict(list) dd['a'].append(1) dd['a'].append(2) for val_list in dd.values(): for num in val_list: print(num)
运行这段代码就会依次输出1和2,每个都是单个值。
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

