[英]Appending new values to pre-existing dictionary keys
set_more
function 意味着 append 現有鍵的新值給我帶來了問題,我真的找不到原因。
info = {}
class Dog:
def __init__(self,info):
info["Name"] = input("Set:\nDog's name: ")
info["Age"] = input("Dog's age: ")
info["Breed"] = input("Dog's breed: ")
def get_info(self,info):
self.info = list(info.values())
infs = []
for i in range(len(self.info)):
infs.append(self.info[i])
print(infs)
return infs
def set_more(self,info):
info.setdefault("Name", []).append(input("Set:\nDog's Name: "))
info.setdefault("Age", []).append(input("Dog's Age: "))
info.setdefault("Breed", []).append(input("Dog's Breed: "))
d = Dog(info)
d.get_info(info)
d.set_more(info)
d.get_info(info)
有2個錯誤。
正如 schwobaseggl 所提到的,您需要將字典的值初始化為列表,以便稍后您可以對它們進行 append。 您可以使用方括號來執行此操作: [input(Dog's age: ")]
而不是使用setdefault
,只需執行info["Field"].append()
。 詳細說明setdefault
,它僅返回具有給定鍵的字段的值。 它不允許您更改字典。
以下是完整的更正代碼。
info = {}
class Dog:
def __init__(self,info):
info["Name"] = [input("Set:\nDog's name: ")]
info["Age"] = [input("Dog's age: ")]
info["Breed"] = [input("Dog's breed: ")]
def get_info(self,info):
self.info = list(info.values())
infs = []
for i in range(len(self.info)):
infs.append(self.info[i])
print(infs)
return infs
def set_more(self,info):
info["Name"].append(input("Set:\nDog's Name: "))
info["Age"].append(input("Dog's Age: "))
info["Breed"].append(input("Dog's Breed: "))
d = Dog(info)
d.get_info(info)
d.set_more(info)
d.get_info(info)
object 的字典方法。 與Java或其他語言相比,Python有一個非常實用和有用的字典。 Dog
是dictionary
類型。
get_info
獲取name
、 breed
和age
的輸入。 將它們放在一個列表中並返回該列表。
set_info
需要一個列表輸入。 它相應地將列表的元素分配給Dog
的元素。
Dog = {}
def get_info():
info = {}
info["Name"] = input("Set:\nDog's name: ")
info["Age"] = input("Dog's age: ")
info["Breed"] = input("Dog's breed: ")
print("\n Input Info: \n")
print(info)
return info
def set_more(info):
Dog[info['Name']] = {"Age" : info["Age"], "Breed": info["Breed"]}
#If you want the Name to be a list item instead of a key:
#Dog[info['Name']] = {"Name" : info["Name"], "Age" : info["Age"],"Breed": info["Breed"]}
print("\n Dogs: \n")
print(Dog)
print()
Dog = {}
set_more(get_info())
set_more(get_info())
除了我使用字典 object 而不是創建 object 之外,此代碼與您的代碼執行完全相同的操作。
注意:我通常不會創建另一個 function 只是為了分配,但我雖然你可能需要getter
和setter
方法。 如果您不需要,您可以簡單地擁有一個 function 來獲取輸入並將它們附加到Dog
字典,如下所示:
def get_info():
info["Name"] = input("Set:\nDog's name: ")
info["Age"] = input("Dog's age: ")
info["Breed"] = input("Dog's breed: ")
Dog[info['Name']] = {"Age" : info["Age"], "Breed": info["Breed"]}
print("\n Input Info: \n")
print(info)
return info
每次調用get_info
時,它都會要求輸入,並將它們附加到Dog
。 這樣,完整的 function 將是:
info = {}
Dog = {}
def get_info():
info["Name"] = input("Set:\nDog's name: ")
info["Age"] = input("Dog's age: ")
info["Breed"] = input("Dog's breed: ")
Dog[info['Name']] = {"Age" : info["Age"], "Breed": info["Breed"]}
print("\n Input Info: \n")
print(info)
return info
get_info()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.