Python 按对象属性对对象字典进行分组

Python 按对象属性对对象字典进行分组,python,Python,我有一个类对象的目录Metric。每个度量对象都有一个名为类别的属性(例如,“cat1”、“cat2”、…)。按类别排列dict最聪明的方法是什么 我现在的解决方案是通过对每个对象进行迭代,然后再次迭代并将每个对象分配给一个类别来创建一组所有类别,但我认为可能有一种更有效的方法 我所拥有的: {'a': <__main__.Metric at 0xb1e3470>, 'b': <__main__.Metric at 0xb14f7b8>, 'c': <__mai

我有一个类对象的目录
Metric
。每个
度量
对象都有一个名为
类别
的属性(例如,“cat1”、“cat2”、…)。按
类别排列dict最聪明的方法是什么

我现在的解决方案是通过对每个对象进行迭代,然后再次迭代并将每个对象分配给一个类别来创建一组所有类别,但我认为可能有一种更有效的方法

我所拥有的:

{'a': <__main__.Metric at 0xb1e3470>,
 'b': <__main__.Metric at 0xb14f7b8>,
 'c': <__main__.Metric at 0xb160828>,
 'd': <__main__.Metric at 0x5ee9128>,
 'e': <__main__.Metric at 0xb14f550>,
 'f': <__main__.Metric at 0xb14ff98>,
 'g': <__main__.Metric at 0xb14fa58>,
...}
{'a':,
“b”:,
“c”:,
“d”:,
“e”:,
‘f’:,
‘g’:,
...}
我想要的是:

{'cat1': [<__main__.Metric at 0xb160828>, ...]
 'cat2': [<__main__.Metric at 0xb14f550>, ...],
...}
{'cat1':[,…]
“第二类”:[,…],
...}
您应该像这样使用:

其中,
your_dict
是问题中提到的保存当前dict的结构

您应该使用如下方式:


其中,
您的dict
是问题中提到的保存当前dict的结构

您可以执行以下操作:

category_dict = {}
for obj in metric_dict.values():
   cat = obj.category
   if cat not in category_dict:
     category_dict[cat] = []
   category_dict[cat].append(obj)
这将为您提供一个类别字典,其中包含一个度量列表:

{ 'cat_1': [Metric, Metric, ...],
    'cat_2': [Metric, Metric, ...],
    ...
  }

您可以执行以下操作:

category_dict = {}
for obj in metric_dict.values():
   cat = obj.category
   if cat not in category_dict:
     category_dict[cat] = []
   category_dict[cat].append(obj)
这将为您提供一个类别字典,其中包含一个度量列表:

{ 'cat_1': [Metric, Metric, ...],
    'cat_2': [Metric, Metric, ...],
    ...
  }
像这样的

cat_dict = dict((obj.category, obj) for obj in metric_dict.itervalues())
像这样的

cat_dict = dict((obj.category, obj) for obj in metric_dict.itervalues())

根据所需的输出,dict的值为
list
,这使我认为可能存在重复的类别yEah,这仅给出每个类别的一个度量。根据所需的输出,有许多dict的值是
list
,这使我认为可能存在重复的类别yEAH,这只给出了每个类别的一个度量。有很多