我有一个类Metric
对象的词典。每个Metric
对象都有一个名为category
的属性(例如,“cat1”,“cat2”,...)。通过category
排列字典最聪明的方法是什么?
我现在的解决方案是通过迭代每个对象来制作一组所有类别,然后再次迭代并将每个对象分配到一个类别,但我认为可能有更有效的方法?
我有什么:
{'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>,
...}
我想要的是什么:
{'cat1': [<__main__.Metric at 0xb160828>, ...]
'cat2': [<__main__.Metric at 0xb14f550>, ...],
...}
答案 0 :(得分:3)
你应该使用collections.defaultdict
之类的:
from collections import defaultdict
my_dict = defaultdict(list)
for obj in your_dict.values():
my_dict[obj.category].append(obj)
# ^ object category as key
其中your_dict
是保存问题中提到的当前字典的结构
答案 1 :(得分:1)
这样的东西?
cat_dict = dict((obj.category, obj) for obj in metric_dict.itervalues())
答案 2 :(得分:0)
您可以执行以下操作:
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, ...],
...
}