所以我在 Stack Overflow 用戶的幫助下撰寫了這段代碼,該代碼根據“ ”或“--”是否出現在個人后面將點數轉移給個人。
def get_name(input):
return input.replace(" ", "").replace("-", "")
def keep(actions: list):
g = {}
for s in actions:
if '->' in s:
names = s.split('->')
g[names[1]] = g[names[0]]
g[names[0]] = 0
else:
name = get_name(s)
if name not in g:
g[name] = 0
if " " in s:
g[name] = 1
if "--" in s:
g[name] -= 1
return {x:g[x] for x in g if g[x] != 0}
print(keep(["Jim ", "John--", "Jeff ", "Jim ", "John--", "John->Jeff",
"Jeff--", "June ", "Home->House"]))
所以大部分程式都沒問題,但是,當我放入"Home->House"它時,它回傳一個KeyError。我有點明白為什么會這樣,但我不知道如何解決這個問題......
我嘗試瀏覽互聯網以尋求解決方案,但他們推薦的只是使用 .get(),這并不能真正幫助我解決問題。
如果一個元素中沒有“ ”或“--”,我如何讓我的輸出忽略它......就像我如何確定輸入只是“Jim”而不是“Jim ”或“吉姆--”,函式會忽略它......
所以在我的例子中,如果輸入keep是
["Jim ", "John--", "Jeff ", "Jim ", "John--", "John->Jeff", "Jeff--", "June ", "Home->House "]
輸出將是
{'Jeff': -2, 'June': 1, 'Jim': 2}
而不是 KeyError
uj5u.com熱心網友回復:
你得到,KeyError因為g[names[1]] = g[names[0]]試圖訪問字典中不存在的元素。你會遇到同樣的問題 simple print(keep(["John->Jeff"])),因為沒有 或--首先執行操作來初始化這些鍵(“John”和“Jeff”在g
根據您想要的輸出,您希望忽略針對非現有密鑰的此類操作。添加if names[1] in g and names[0] in g:到您的keep實施中,即編輯:還g[names[1]] = g[names[0]]需要更改g[names[1]] = g[names[0]]為產品正確的結果。
def get_name(input):
return input.replace(" ", "").replace("-", "")
def keep(actions: list):
g = {}
for s in actions:
if "->" in s:
names = s.split("->")
if names[1] in g and names[0] in g:
g[names[1]] = g[names[0]]
g[names[0]] = 0
else:
name = get_name(s)
if name not in g:
g[name] = 0
if " " in s:
g[name] = 1
if "--" in s:
g[name] -= 1
return {x: g[x] for x in g if g[x] != 0}
uj5u.com熱心網友回復:
在您的代碼中,當您獲得 時Home->House,它是兩個鍵的第一次出現。這就是為什么KeyError當您嘗試執行時會得到g[names[1] = g[names[0]]: g[names[0]]is g['Home'],但該條目在您的 dict 中不存在。您可以簡單地解決交換行的順序:
if '->' in s:
names = s.split('->')
g[names[0]] = 0
g[names[1]] = g[names[0]]
要忽略沒有“ ”或“--”的字串,您可以在執行之前簡單地添加一個 if get_name(s):
else:
if ' ' in s or '--' in s:
name = get_name(s)
if name not in g:
g[name] = 0
if " " in s:
g[name] = 1
if "--" in s:
g[name] -= 1
此代碼回傳預期的輸出
uj5u.com熱心網友回復:
您的代碼實際上確實忽略了在函式的 else 部分中不包含“ ”或“--”的示例。
KeyError出現此問題是因為在您嘗試將“Home”條目移動到“House”條目之前,“Home”和“House”均未出現在輸入字串串列中。因為鍵 "Home" 和 "House" 不在您的字典中,所以g您會得到一個KeyError.
下面是一個解決方案,它可以滿足您的需求。
def get_name(input):
return input.replace(" ", "").replace("-", "")
def keep(actions: list):
g = {}
for s in actions:
if '->' in s:
names = s.split('->')
if names[0] in g.keys() and names[1] in g.keys():
g[names[1]] = g[names[0]] g[names[1]]
g[names[0]] = 0
else:
name = get_name(s)
if name not in g:
g[name] = 0
if " " in s:
g[name] = 1
if "--" in s:
g[name] -= 1
return {x:g[x] for x in g if g[x] != 0}
print(keep(["Jim ", "John--", "Jeff ", "Jim ", "John", "John--", "John->Jeff",
"Jeff--", "June ", "Home->House"]))
d當輸入字串包含“->”時,我添加了一個檢查以確保鍵存在于 dict 中。
為了獲得您在問題中指出的輸出,其中包括'Jeff': -2,您還需要確保將原始鍵的值添加到新鍵的值中。這是在線完成的
g[names[1]] = g[names[0]] g[names[1]]
否則,輸出將顯示'Jeff': -3為輸入字串"Jeff "將被忽略。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/366696.html
上一篇:字典的深度復制值到變數c#
