[英]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_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
key 增加了3
,其他 key/val 對有如您所料,已添加。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.