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

2024-04-29 11:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想遍历字典列表,但它给了我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)

例外-

Traceback (most recent call last): File "C:/Users/Derick/PycharmProjects/Puthon3_2019/dictionaries2.py", line 14, in for k, v in users_dict.items(): # fails at this line AttributeError: 'str' object has no attribute 'items'

不过,如果我使用下面这样的词典,效果会很好-

print(user_list[0].items())

我给我-

dict_items([('last', 'fermi'), ('first', 'enrico'), ('username', 'efermi')])

Tags: innewforlineusernameitemsusersdict
3条回答

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

不能在对列表进行迭代时将其添加到列表中user_list.append(v)将一个字符串添加到字典列表中,它会导致下一次迭代失败,因为它试图在字符串中执行.items()

正如其他人所说,您将v作为字符串附加到由dict组成的迭代列表中,以字符串和字典的混合形式结束,这是不可取的。我认为这是一种打字错误,可以通过一个简单的:

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]

相关问题 更多 >