我想迭代字典列表,但它给了我AttributeError
这是我的代码 -
user_list = []
new_user = { 'last': 'fermi',
'first': 'enrico',
'username': 'efermi', }
user_list.append(new_user)
new_user = { 'last': 'fermi2',
'first': 'enrico2',
'username': 'efermi2', }
user_list.append(new_user)
for users_dict in user_list:
for k, v in users_dict.items(): # fails at this line
if(k == 'username'):
user_list.append(v)
例外 -
回溯(最近一次调用最后一次):文件“C:/Users/Derick/PycharmProjects/Puthon3_2019/dictionaries2.py”,第14行,in为k,v在users_dict.items()中:#在此行失败AttributeError:'str '对象没有属性'项'
但是,如果我访问下面的字典工作正常 -
print(user_list[0].items())
我给了我 -
dict_items([('last', 'fermi'), ('first', 'enrico'), ('username', 'efermi')])
迭代时,您无法添加到列表中。 user_list.append(v)
在字典列表中添加一个字符串,它会导致下一次迭代失败,因为它试图在字符串中执行.items()
。
您正在向您追加您正在迭代的相同列表。在下一次迭代中,for循环从该列表中选择一个字符串而不是dict,这就是你得到错误的地方。
正如其他人所说,你将v
(一个字符串)附加到你正在迭代的列表中,由dicts组成,以字符串和字典的混合结尾,这是不可取的。我认为这是一种错字,可通过简单的方法修复:
usernames = []
for users_dict in user_list:
for k, v in users_dict.items(): # fails at this line
if(k == 'username'):
usernames.append(v)
usernames
>>> ['efermi', 'efermi2']
或更好:
usernames = [x["username"] for x in user_list]
原因是你在迭代中向str
添加了一个user_list
:
user_list.append(v)
在python中,编辑时允许遍历list
,list
将迭代附加到它的新内容。
例如,我们可以使用list
来执行bfs,同时遍历和编辑。
for node in bfs:
bfs += node.successor
return bfs