无法从for循环中的列表中提取字典

问题描述 投票:1回答:4

我想迭代字典列表,但它给了我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')])
python python-3.x
4个回答
2
投票

迭代时,您无法添加到列表中。 user_list.append(v)在字典列表中添加一个字符串,它会导致下一次迭代失败,因为它试图在字符串中执行.items()


2
投票

您正在向您追加您正在迭代的相同列表。在下一次迭代中,for循环从该列表中选择一个字符串而不是dict,这就是你得到错误的地方。


2
投票

正如其他人所说,你将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]

1
投票

原因是你在迭代中向str添加了一个user_list

user_list.append(v)

在python中,编辑时允许遍历listlist将迭代附加到它的新内容。

例如,我们可以使用list来执行bfs,同时遍历和编辑。

    for node in bfs:
        bfs += node.successor
    return bfs
© www.soinside.com 2019 - 2024. All rights reserved.