创建字典列表的排列

时间:2013-08-15 20:51:40

标签: python python-2.7 permutation cartesian-product

我想列出一个词典列表,并以特定格式创建一个新的排列列表。

例如,我在下面有一个列表,里面有字典。我想以特定格式使用这些项目创建所有可能的列表: (例如结果= [A型字典,B字典,B型字典,C型字典,C型字典,D型字典,E型字典,F型字典])其中两项B型不能相等,C型的两个项不能相等。我将处理大量项目,因此任何有关如何更有效地处理排列的提示都会有所帮助。

{'Items':[
{'Name':'name10','Type':'A','measure1':20,'measure2':20},
{'Name':'name20','Type':'A','measure1':25,'measure2':30},
{'Name':'name30','Type':'B','measure1':15,'measure2':40},
{'Name':'name40','Type':'B','measure1':20,'measure2':50},
{'Name':'name50','Type':'B','measure1':25,'measure2':60},
{'Name':'name60','Type':'C','measure1':15,'measure2':70},
{'Name':'name70','Type':'C','measure1':20,'measure2':80},
{'Name':'name80','Type':'C','measure1':25,'measure2':90},
{'Name':'name90','Type':'D','measure1':10,'measure2':30},
{'Name':'name85','Type':'D','measure1':15,'measure2':30},
{'Name':'name75','Type':'E','measure1':53,'measure2':30},
{'Name':'name65','Type':'E','measure1':10,'measure2':30},
{'Name':'name55','Type':'F','measure1':56,'measure2':10},
{'Name':'name45','Type':'F','measure1':10,'measure2':20}
]}

1 个答案:

答案 0 :(得分:0)

假设您的项目字典位于变量x

x_set = set((i['Name'], i['Type'], i['measure1'], i['measure2']) for i in x['Items'])
items = [{'Name': i[0], 'Type': i[1], 'measure1': i[2], 'measure2': i[3]} for i in sorted(x_set)]
new_x = {'Items': items}

简单地使用字典的set()会很好,但这在Python中是不可能的。这些词典必须打包成元组,并重新打包成字典。

要处理大量项目,请考虑根据名称或类型将其分解为“分片”。