将新值附加到预先存在的字典键
Appending new values to pre-existing dictionary keys
旨在将新值附加到现有键的 set_more
函数给我带来了问题,我真的找不到原因。
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 所提到的,您需要将字典的值初始化为列表,以便稍后可以附加到它们。您可以使用方括号来做到这一点:[input(Dog's age: ")]
不要使用 setdefault
,只需使用 info["Field"].append()
。详细说明 setdefault
,它仅 returns 具有给定键的字段的值。它不允许您更改字典。
下面是更正后的完整代码。
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)
对象的字典方法。与 Java 或其他语言相比,Python 具有非常实用的字典。
Dog
属于 dictionary
.
类型
get_info
获取 name
、breed
和 age
的输入。将它们放入列表中,然后 returns 列表。
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())
除了我使用字典对象而不是创建对象外,此代码与您的代码做的事情完全相同。
注意:我通常不会仅仅为了赋值而创建另一个函数,但我认为您可能同时需要 getter
和 setter
方法。如果你不需要它,你可以简单地使用一个函数来获取输入并将它们附加到 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
。这样,完整的功能将是:
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()
旨在将新值附加到现有键的 set_more
函数给我带来了问题,我真的找不到原因。
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 所提到的,您需要将字典的值初始化为列表,以便稍后可以附加到它们。您可以使用方括号来做到这一点:
[input(Dog's age: ")]
不要使用
setdefault
,只需使用info["Field"].append()
。详细说明setdefault
,它仅 returns 具有给定键的字段的值。它不允许您更改字典。
下面是更正后的完整代码。
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)
对象的字典方法。与 Java 或其他语言相比,Python 具有非常实用的字典。
Dog
属于 dictionary
.
get_info
获取 name
、breed
和 age
的输入。将它们放入列表中,然后 returns 列表。
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())
除了我使用字典对象而不是创建对象外,此代码与您的代码做的事情完全相同。
注意:我通常不会仅仅为了赋值而创建另一个函数,但我认为您可能同时需要 getter
和 setter
方法。如果你不需要它,你可以简单地使用一个函数来获取输入并将它们附加到 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
。这样,完整的功能将是:
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()