提问人:Schradt 提问时间:11/3/2023 更新时间:11/3/2023 访问量:39
DataClass 对象列表的字典 GET 方法 - 在 DataClass 列表中查找具有特定变量值的 DataClass
dictionary get method for list of dataclass objects - find dataclass with specific variable value in list of dataclasses
问:
###It 在我看来,找到数据类对象的方法必须比遍历所有对象以查找特定对象更好。
#My way, that I hope to improve:
def changeValueOf(primaryKey):
for item in self.addlist:
if item.id == primaryKey:
# Do stuff...
#Basics:
listOfKeys = "AA BB CC".split()
@dataclass
class Feld:
id: str
value1: str
value2: str
value3: str
self.addlist: List = []
for element in Daten:
data = Feld(element[0], element[1], element[2], int(element[3]))
self.addlist.append(data)
答:
0赞
blhsing
11/3/2023
#1
跟踪类的所有实例的一种常见且有效的方法是将每个实例存储在某个键的字典的类变量中,并使用类方法通过键检索实例。在您的情况下,请使用该属性作为键:id
from typing import ClassVar
from dataclasses import dataclass
@dataclass
class Feld:
_id_to_instance: ClassVar[dict] = {}
id: str
value: str
def __post_init__(self):
self._id_to_instance[self.id] = self
@classmethod
def get_instance_by_id(cls, id):
return cls._id_to_instance[id]
因此:
for id, value in ('id1', 'value1'), ('id2', 'value2'):
Feld(id, value)
print(Feld.get_instance_by_id('id2'))
输出:
Feld(id='id2', value='value2')
评论
0赞
Schradt
11/3/2023
听起来很有希望,但不能解决我的要求。我终于访问了 Feld 类的列表。该列表没有方法 get_instance_by_id(),我无法向单个类询问列表中是否存在其他类 - 或者我错了?!
0赞
Schradt
11/3/2023
我错了....我只需访问 self.addlist[0].get_instance_by_id('Datum'),我就会得到我需要的列表元素。完善!感谢您的帮助。我刚接触 Python 几个星期。
评论
addlist
id
addlist