Конвертировать список словарей в объекты dataclass
Есть список словарей:
a = [{"id": 12683, "text": "шла саша по шоссе"}, {"id": 8384, "text": "ехал грека через реку"}, {"id": 3974, "text": "мы пришли домой"}, {"id": 2456, "text": "мама мыла машу"}..]
Используя dataclass, необходимо сделать так, чтобы можно было обращаться к полям этих словарей через объекты класса.
Есть небольшая наработка
from dataclasses import dataclass
@dataclass(frozen=True)
class Texts:
id: int
text: str
Но не понимаю как дальше работать с этим
Ответы (2 шт):
Автор решения: GrAnd
→ Ссылка
Можно точно так же создать список, только из экземпляров класса.
b = [Texts(d["id"], d["text"]) for d in a]
В переменной b будет:
[Texts(id=12683, text='шла саша по шоссе'),
Texts(id=8384, text='ехал грека через реку'),
Texts(id=3974, text='мы пришли домой'),
Texts(id=2456, text='мама мыла машу')]
Пример обращения:
print(b[1].text)
# Напечатает "ехал грека через реку"
Автор решения: SergFSM
→ Ссылка
У dataclass есть много особых настроек (можно почитать здесь) но если вы не планируете что-то подобное использовать, то можно обойтись namedtuple (коллекция также будет неизменяемой):
from collections import namedtuple
a = [{"id": 12683, "text": "шла саша по шоссе"},
{"id": 8384, "text": "ехал грека через реку"},
{"id": 3974, "text": "мы пришли домой"},
{"id": 2456, "text": "мама мыла машу"}]
Texts = namedtuple("Texts", ["id", "text"])
b = [Texts(**d) for d in a]
'''
[Texts(id=12683, text='шла саша по шоссе'),
Texts(id=8384, text='ехал грека через реку'),
Texts(id=3974, text='мы пришли домой'),
Texts(id=2456, text='мама мыла машу')]
'''
пример обращения:
print(*[i.text.title() for i in b], sep='\n')
'''
Шла Саша По Шоссе
Ехал Грека Через Реку
Мы Пришли Домой
Мама Мыла Машу
'''