有没有办法将多对多对象关系转换成字典?

问题描述

我有两个课

  • 具有属性ID和名称的俱乐部
  • 带有财产ID,姓名和俱乐部(列表)的学生

一个学生可以加入多个俱乐部。
一个俱乐部可以有多个学生

class Club:
 def __init__(self,id,name):
    self.id = id
    self.name = name

class Student:
 def __init__(self,name,clubs):
    self.id = id
    self.name = name
    self.clubs = clubs

我想要一本字典,其中的关键是俱乐部名称,值是学生名单。

应用程序中大约有30种不同的关系。

有没有一种通用的方法

解决方法

粗略的逆变器可能如下所示。

def reverse(elems,array_name,i_key):
  dic = {}
  for elem in elems:
    for elem_field in elem[array_name]:
      key = elem_field[i_key]
      if key not in dic:
        dic[key] = []
      dic[key].append(elem)
  return dic

club_a = { 'name': 'a'}
club_b = { 'name': 'b'}
club_c = { 'name': 'c'}
stud_a = { 'id': 1,'clubs': [club_a,club_b]}
stud_b = { 'id': 2,'clubs': [club_b,club_c]}
print(reverse([stud_a,stud_b],'clubs','name'))
# a: stud_a
# b: stud_a,stud_b
# c: stud_b