Python遍历列表和字典

2024-06-16 10:13:02 发布

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

这是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

它似乎可以工作,但只适用于列表中的第一项,它不会遍历其余项。有人能帮忙吗?你知道吗


Tags: 列表字典条目dict测试项目书籍coinoriginal
1条回答
网友
1楼 · 发布于 2024-06-16 10:13:02

函数在完成第一次迭代后返回。你知道吗

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块代替if/else
  • 删除str(i)调用;您的列表元素已经是字符串了,因此不需要对它们进行字符串转换,并且
  • 改进的变量名(例如inventory而不是dict_a,以及items而不是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,并且添加了其他键/val对,如您所料。你知道吗

相关问题 更多 >