我想遍历字典列表,但这给了我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:/用户/Derick/PycharmProjects/Puthon3_2019/dictionaries2.py”,行 14,在 对于k,在users_dict.items()中的v:#在此行失败AttributeError:'str'对象没有属性'items'
但是,如果我正在访问如下所示的词典,则工作正常-
print(user_list[0].items())
我给我-
dict_items([('last', 'fermi'), ('first', 'enrico'), ('username', 'efermi')])
答案 0 :(得分:2)
在迭代列表时不能将其添加到列表中。 user_list.append(v)
在字典列表中添加了一个字符串,由于它试图在字符串中执行.items()
,因此导致下一次迭代失败。
答案 1 :(得分:2)
您将向您追加要迭代的相同列表。在下一次迭代中,for循环从列表中选择一个字符串而不是一个dict,这就是您得到错误的地方。
答案 2 :(得分:2)
正如其他人所说,您要将chqrlie$ strace ./rb612-1
...
<removed system calls related to program startup>
...
open("hello_world.txt", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5e356ed000
fstat(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
lseek(3, 0, SEEK_SET) = 0
read(3, "Hello world!", 12) = 12
lseek(3, 12, SEEK_SET) = 12
read(3, "", 100) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5e356ec000
write(1, "\n", 1
) = 1
write(1, "read(fileno(fp), buffer, 100) = "..., 55read(fileno(fp), buffer, 100) = 0, Buffer: '', sz = 12
) = 55
close(3) = 0
munmap(0x7f5e356ed000, 4096) = 0
open("hello_world.txt", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f5e356ed000
fstat(3, {st_mode=S_IFREG|0644, st_size=12, ...}) = 0
lseek(3, 0, SEEK_SET) = 0
read(3, "Hello world!", 13) = 12
lseek(3, 1, SEEK_CUR) = 13
lseek(3, 0, SEEK_SET) = 0
read(3, "Hello world!", 100) = 12
write(1, "\n", 1
) = 1
write(1, "read(fileno(fp), buffer, 100) = "..., 68read(fileno(fp), buffer, 100) = 12, Buffer: 'Hello world!', sz =
) = 68
close(3) = 0
munmap(0x7f5e356ed000, 4096) = 0
(这是一个字符串)附加到要由dict组成的要迭代的列表中,以字符串和字典的混合结尾,这是不可取的。我认为这是一种错字,可以通过简单的方式解决:
v
或更好:
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']
答案 3 :(得分:1)
原因是您在迭代中向str
添加了user_list
:
user_list.append(v)
在python中,在遍历list
的同时进行编辑,而list
将迭代附加到其上的新内容。
例如,我们可以使用list
进行bfs,同时遍历和编辑。
for node in bfs:
bfs += node.successor
return bfs