如何遍历嵌套字典并从数组内嵌套字典取值?解决属性报错
解决
'list' object has no attribute 'iteritems'报错并实现需求 首先咱们来拆解报错的原因:你代码里的dict1['c']对应的是一个列表(里面嵌套了三个字典),而iteritems()是字典专属的方法,列表根本没有这个属性,所以才会抛出这个错误。
接下来直接修正代码,实现你要的需求——获取'c'对应内容里的第一个值:
方法一:直接索引定位(最简洁)
如果你的需求就是只取'c'列表里第一个元素的第一个值,完全不需要循环,直接索引定位更高效:
dict1 = { 'a': 1, 'b': 2, 'c': [{'aa': 11, 'bb': 22},{'aa': 111, 'bb': 222},{'aa': 1111, 'bb': 2222}] } # 拿到'c'列表里的第一个字典 first_dict = dict1['c'][0] # 获取这个字典的第一个值(Python 3.7+字典默认按插入顺序存储,能保证取到第一个键对应的值) first_value = next(iter(first_dict.values())) # 打印结果 print(first_value)
运行后会输出11,正好是你要的目标值。
方法二:按你原始思路调整(保留循环逻辑)
如果你坚持要通过循环实现,那得先遍历dict1['c']里的字典元素,同时限制只循环第一次:
dict1 = { 'a': 1, 'b': 2, 'c': [{'aa': 11, 'bb': 22},{'aa': 111, 'bb': 222},{'aa': 1111, 'bb': 2222}] } # 用[:1]切片只取'c'列表的第一个元素,实现你注释里的"loop only 1 first time" for item in dict1['c'][:1]: # 获取当前字典的第一个值 first_val = next(iter(item.values())) print(first_val)
这段代码同样会输出11,完美匹配你的需求。
补充小提示
- 如果你还在使用Python 2(不推荐,已淘汰),字典是无序的,要取第一个值得用
item.items()[0][1];而且Python 2里列表也没有iteritems()方法,依然会报错。 next(iter(dict.values()))是Python 3中获取字典第一个值的高效写法,不需要把所有值转成列表再取索引。
内容的提问来源于stack exchange,提问作者netkool
相关产品推荐
相关产品推荐

