2013-03-04 53 views
0

我有一个未知数量的词典,每个词典都由特定的代码标识。在python中排序和分组多个词典

所有的值都是动态创建的,所以要分组的代码是未知的。
我希望有人能够帮助我确定将词典分组的最佳方式,以便我可以通过每个词典来生成一张表格。字典中实际上有大约7个项目。

每个字典是表中的一行。

例如:

results = ['GROUP1':{'name':'Sam', 'code':'CDZ', 'cat_name':'category1', 'cat_code':'GROUP1'}, 'GROUP1':{'name':'James', 'code':'CDF', 'cat_name':'category1', 'cat_code':'GROUP1'}, 'GROUP2':{'name':'Ellie', 'code':'CDT', 'cat_name':'category2', 'cat_code':'GROUP2'}] 

我希望能够利用以产生以下格式化这些字典到表:

组别1 - 产品组别
代码|名称

CDZ | Sam
CDF | James

GROUP2 - category2
代码|名称

CDT | Ellie

非常感谢。

回答

1

如果results是这样

>>> results = [ 
...  {'name': 'Sam', 'code': 'CDZ', 'cat_name': 'category1', 'cat_code': 'GROUP1'}, 
...  {'name': 'James', 'code': 'CDF', 'cat_name': 'category1', 'cat_code': 'GROUP1'}, 
...  {'name': 'Ellie', 'code': 'CDT', 'cat_name': 'category2', 'cat_code': 'GROUP2'}] 
>>> from collections import defaultdict 
>>> D = defaultdict(list) 
>>> for item in results: 
... D[item['cat_code'], item['cat_name']].append((item['code'], item['name'])) 
... 
>>> import pprint 
>>> pprint.pprint(dict(D)) 
{('GROUP1', 'category1'): [('CDZ', 'Sam'), ('CDF', 'James')], 
('GROUP2', 'category2'): [('CDT', 'Ellie')]} 

类型的字典列表您可以通过D.items()循环和做任何你喜欢

+0

完美!谢谢!我知道它必须比我做得更简单。 – devjess 2013-03-04 04:14:28

0

你的前两个问题是你的示例输入是无效的Python(字典语法是{},而不是[]),并且你不能在一个字典中有两个相同的键。在你解决这些问题之前,我们无能为力。我不知道你想如何解决重复密钥问题 - 也许你实际上需要一个数组的字典而不是字典的字典?

+0

啊!是的,我认为你实际上是对的!我很快会回来编辑。 – devjess 2013-03-04 03:44:50