首页 > 解决方案 > 将字典列表分组为类对象

问题描述

我有一个字典列表如下,有 4 个键

dict_list = [
{'key1': 'a', 'key2':'b' , 'key3':'p' , 'key4':'q' },
{'key1': 'a', 'key2':'b' , 'key3':'p' , 'key4':'r' },
{'key1': 'a', 'key2':'c' , 'key3':'p' , 'key4':'q' },
{'key1': 'a', 'key2':'c' , 'key3':'p' , 'key4':'r' },
{'key1': 'a', 'key2':'d' , 'key3':'p' , 'key4':'q' }
]

我有一个类 abc 如下

class abc:
   def __init__(self, val1, val2, val3, val4)
       self.val1 = val1
       self.val2 = val2
       self.val3 = val3
       self.val4 = val4

@classmethod
def from_resultdict(cls, result):
        return cls(result['key1'],
                   result['key2'],
                   result['key3'],
                   result['key4'])

我得到了 List[abc] 与以下片段

return [abc.from_resultdict(r) for r in dict_list]

我现在想添加一个 class2 用于根据 key1 和 key2 的值​​对对象列表进行分组

class class2:
      def __init__(self, value1, value2)
          self.value1 = value1
          self.value2 = value2
          self.list_of_abcs: List[abc]

我想为 dict_list 提供 3 个 class2 对象,例如

object1 {
  value1 = a
  value2 = b
  list_of_abcs = [abc_object1 , abc_object2]
}

object2 {
 value1 = a
 value2 = c
 list_of_abcs = [abc_object3 , abc_object4]
}

object3 {
 value1 = a
 value2 = d
 list_of_abcs = [abc_object5]
}

我怎样才能做到这一点?

标签: pythonpython-3.xoopclass-method

解决方案


dict为-objects创建一个,Class2以便您可以为每个 -object 找到正确的一个Abc

class Class2:
    def __init__(self, value1, value2)
        self.value1 = value1
        self.value2 = value2
        self.list_of_abcs = []
    
objects = {}

for abc in abc_list:
    key = (abc.val1, abc.val2)
    if key not in objects: # create a Class2 instance if it doesn't exist yet
        objects[key] = Class2(key[0], key[1])
    # append the abc-object to the correct Class2 instance
    objects[key].list_of_abcs.append(abc)

推荐阅读