【问题标题】:Creating permuations of a list of dictionaries创建字典列表的排列
【发布时间】:2013-08-18 04:03:24
【问题描述】:

我想获取一个字典列表并以特定格式创建一个新的排列列表。

例如,我在下面有一个包含字典的列表。我想以特定格式使用这些项目创建所有可能的列表: (例如result=[A类型的dict,B类型的dict,B类型的dict,C类型的dict,C类型的dict,D类型的dict,E类型的dict,F类型的dict])其中两项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}
]}

【问题讨论】:

  • 也许这样的事情会有所帮助? docs.scipy.org/doc/numpy/reference/generated/…
  • 你能举一个更好的例子来说明你希望它是什么样子吗? {"A": [{"Name": "name10", {"measure1" :"20"}, {"Name": "name20", {"measure1" :"30"}]} 之类的东西?
  • 我不明白排列的来源。您只是删除/合并重复项吗?
  • 我想看到一个结果,它将是许多集合的 dicts 列表:[[{'Name':'name10','Type':'A','measure1': 20,'measure2':20},{'Name':'name30','Type':'B','measure1':15,'measure2':40},{'Name':'name50','Type ':'B','measure1':25,'measure2':60},{'Name':'name60','Type':'C','measure1':15,'measure2':70},{ 'Name':'name80','Type':'C','measure1':25,'measure2':90},{'Name':'name85','Type':'D','measure1': 15,'measure2':30},{'Name':'name65','Type':'E','measure1':10,'measure2':30},{'Name':'name45','Type ':'F','measure1':10,'measure2':20}] 等...]
  • @roippi 当我想到按特定顺序创建一组项目的所有可能组合时,我想到了排列。这就是我想做的,但要过滤掉重复对象的集合。

标签: python python-2.7 permutation cartesian-product


【解决方案1】:

假设您的 Items 字典在变量 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 中是不可能的。必须将字典解包成元组,然后重新打包成字典。

要处理大量项目,请考虑根据名称或类型将它们分成“碎片”。

【讨论】:

  • 我现在正在做的事情如下,将大的字典列表分解成较小的字典列表,用 'a_s = filter(lambda (d): d['Type' ] == 'A', listDict)' 然后用 for 循环遍历每一个,像这样:'for f in first: for s in second: for t in third: result.append([f, s, t] )',然后将 for 循环中的所有结果附加到我的结果中。
  • 是的,这就是我所说的按类型将它们分成碎片/组的意思。
  • 如果这回答了您的问题,请将其标记为已接受。谢谢!
猜你喜欢
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多