Как добавить элемент к элементу словаря?

У меня есть такой код:

class Throne:
  def __init__(self, fkg, fkggender):
    self.fkg = fkg
    self.wiknow = fkg
    self.all = dict()
    self.all[fkg] = fkggender
    self.alive = dict()
    self.alive[fkg] = True
    self.coup = list()
    self.parents = dict()
    self.children = [[[0 for i in range(5)] for j in range(5)] for k in range(5)]

  def new_born(self, fpn, spn, kn1, Gen):
    if (fpn in self.all.keys()) and (spn in self.all.keys()):
      self.parents[fpn] = self.parents.get(fpn), kn1
      self.parents[spn] = self.parents.get(spn), kn1
      self.alive[kn1] = True
      self.all[kn1] = Gen
    else:
      print(fsn + ' and ' + ssn + ' are crooks!')
  def marry(self, fsn, ssn):
    if (fsn in self.all.keys()):
      self.all[ssn] = "F"
      self.alive[ssn] = True
      self.coup.append([fsn, ssn])
    elif (ssn in self.all.keys()):
      self.all[fsn] = 'M'
      self.alive[fsn] = True
      self.coup.append([fsn, ssn])
    else:
      print(fsn + ' and ' + ssn + ' are crooks!')

romanovy = Throne('Mihail Fedorov I', 'M')
romanovy.marry('Mihail Fedorov I', 'Evdokia')
romanovy.new_born('Mihail Fedorov I', 'Evdokia', 'Ilya', 'M')
romanovy.new_born('Mihail Fedorov I', 'Evdokia', 'Dima', 'M')

Больше ошибку не выдает, теперь в new_born

self.parents[fpn] = self.parents.get(fpn), kn1
self.parents[spn] = self.parents.get(spn), kn1

но в parents теперь лежит {'Mihail Fedorov I': ((None, 'Ilya'), 'Dima'), 'Evdokia': ((None, 'Ilya'), 'Dima')} Как убрать скобки и оставить только {'Mihail Fedorov I': 'Ilya', 'Dima', 'Evdokia': 'Ilya', 'Dima'} где 2 элемента: 'Mihail Fedorov I': 'Ilya', 'Dima' и 'Evdokia': 'Ilya', 'Dima'


Ответы (1 шт):

Автор решения: asanisimov

По порядку:

romanovy = Throne('Mihail Fedorov I', 'M')

при инициализации экземпляра класса Вы создаете пустой словарь self.parents = dict()

romanovy.marry('Mihail Fedorov I', 'Evdokia')

Далее выполняете метод, который никак не затрагивает его содержимое.

romanovy.new_born('Mihail Fedorov I', 'Evdokia', 'Ilya', 'M')

А в следующем методе присваиваете ему список, где первый элемент пытаетесь достать из словаря (а он пуст) self.parents[fpn] = [self.parents[fpn], kn1]. Попробуйте через self.parents.get(fpn, <значение_если_ключа_нет>), либо если словарь пустой вообще не передавайте его в list.

update: Для добавления имен используйте список/кортеж, что бы не городить лишнюю логику можно использовать изначально в __init__ - self.parents = defaultdict(list), тогда можно без блока if

        if not self.parents.get(fpn) and not self.parents.get(spn):
            self.parents[fpn] = []
            self.parents[spn] = []
        self.parents[fpn].append(kn1)
        self.parents[spn].append(kn1)
→ Ссылка