gpt4 book ai didi

Python 遍历列表和字典

转载 作者:太空宇宙 更新时间:2023-11-04 03:23:53 26 4
gpt4 key购买 nike

这是python书上的一个测试项目。我正在尝试遍历列表并检查每个项目是否是字典中的键。如果是,则将 1 添加到字典值,如果不是,则添加键,然后将值设置为 1。到目前为止,这是我的代码:

inv_original = {'gold coin' : 42, 'rope' : 1}
dragonloot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']

def addtoinventory(dict_a, addeditems):
for i in addeditems:
if dict_a.has_key(i):
dict_a[str(i)] = dict_a.get(i, 0) + 1
else:
dict_a[str(i)] = 1
return dict_a

inv = addtoinventory(inv_original, dragonloot)

print inv

它似乎有效,但仅适用于列表中的第一项,不会遍历其余项。有人可以帮忙吗?

最佳答案

您的函数在完成第一次迭代后返回。

def addtoinventory(dict_a, addeditems):
for i in addeditems:
if dict_a.has_key(i):
dict_a[str(i)] = dict_a.get(i, 0) + 1
else:
dict_a[str(i)] = 1
return dict_a # <----- issue here
# ...

您应该将 return 语句移到循环体之外,通过取消缩进 4 个空格来解决此问题。您还应该考虑:

  • 使用 try/except block 代替 if/else,
  • 删除 str(i) 调用;您的列表元素已经是字符串,因此没有必要尝试对它们进行字符串转换,并且
  • 改进了变量名称(例如,inventory 而不是 dict_aitems 而不是 addeditems,这很可能多余的——如果它在列表中,它显然已经被添加了:)

更新后的代码如下:

#!/usr/bin/python

inv_original = {'gold coin' : 42, 'rope' : 1}
dragonloot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']

def addtoinventory(inventory, items):
for i in items:
try:
inventory[i] += 1
except KeyError:
inventory[i] = 1

return inventory

#
print addtoinventory(inv_original, dragonloot)
# ...

代码的输出现在是:{'gold coin': 45, 'rope': 1, 'dagger': 1, 'ruby': 1},表明 gold coin 键增加了 3,并且如您所料添加了其他键/值对。

关于Python 遍历列表和字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33716626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com