簡體   English   中英

將新值附加到預先存在的字典鍵

[英]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個錯誤。

  1. 正如 schwobaseggl 所提到的,您需要將字典的值初始化為列表,以便稍后您可以對它們進行 append。 您可以使用方括號來執行此操作: [input(Dog's age: ")]

  2. 而不是使用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有一個非常實用和有用的字典。 Dogdictionary類型。

get_info獲取namebreedage的輸入。 將它們放在一個列表中並返回該列表。

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 只是為了分配,但我雖然你可能需要gettersetter方法。 如果您不需要,您可以簡單地擁有一個 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.

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