重命名Python列表中的对象

toe95027  于 2023-06-25  发布在  Python
关注(0)|答案(2)|浏览(127)

假设我有一个名为dogs的列表,其中包含了Dog类的对象。我想将列表中的每个对象重命名为dog的id属性,同时仍然能够修改每个索引处的对象。

class Dog:
    def __init__(self, name, age, breed, id):
        self.name = name
        self.age = age
        self.breed = breed
        self.id = id

dogs = []

intake = input("Enter the number of dogs to intake:")

for i in range(0,int(intake)):
    name = input("Name of dog: ")
    age = input("Age of dog: ")
    breed = input("Breed of dog: ")
    dog_id = input("Dog ID: ")
    dogs.append(Dog(name, age, breed, dog_id))

如果你打印列表中的所有对象,你会得到类似这样的结果:

[<__main__.Dog object at 0x1234>, <__main__.Dog object at 0x5678>]

我想将列表中的所有对象重命名为dog id,保留它们的属性。

snz8szmq

snz8szmq1#

如果你想使用dog_id访问数据,最好使用嵌套字典。

intake = int(input("Enter the number of dogs to intake:"))
Dogs={}
for i in range(0,intake):
    name = input("Name of dog: ")
    age = int(input("Age of dog: "))
    breed = input("Breed of dog: ")
    dog_id = input("Dog ID: ")
    Dogs[dog_id]={'name':name,'age':age,'breed':breed}

#To get a list of all the IDs, you could use Dogs.keys()

print(Dogs[<enter the dog ID here>]['name'])

您可以使用ID访问任何名称或品种或年龄。(记住ID应该用引号括起来,因为它是一个字符串,如果在获取dog_id的输入时使用int(),则不必这样做)
要更改值,可以执行以下操作

Dogs[enter the dog ID here]['name' or 'age' or 'breed']= enter the new value
k7fdbhmy

k7fdbhmy2#

对于像这样的行为,你需要在Dog类上插入__str__方法,你还必须逐个打印dogs,或者在每个dogs上调用str(dog

class Dog:
    def __init__(self, name, age, breed, id):
        self.name = name
        self.age = age
        self.breed = breed
        self.id = id
    
    def __str__(self):
        return f"{self.id}"

dogs = []

intake = 2

for i in range(0, int(intake)):
    name = input("Name of dog: ")
    age = input("Age of dog: ")
    breed = input("Breed of dog: ")
    dog_id = input("Dog ID: ")
    dogs.append(Dog(name, age, breed, dog_id))

for dog in dogs:
    print(dog)

print([str(dog) for dog in dogs])

相关问题