簡體   English   中英

Python 遍歷列表和字典

[英]Python iterating through lists and dictionaries

這是 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
# ...

您應該通過將行取消縮進 4 個空格來將return語句移到循環體之外以解決問題。 您還應該考慮:

  • 使用try / except塊而不是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 key 增加了3 ,其他 key/val 對有如您所料,已添加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM