首页 > 解决方案 > 如何根据值获取所有唯一的字典集?

问题描述

我有一个字典列表,如下所示。

mylist = [{'fname': 'a', 'lname': '1'},
          {'fname': 'b', 'lname': '2'},
          {'fname': 'c', 'lname': '3'},
          {'fname': 'd', 'lname': '3'},
          {'fname': 'e', 'lname': '4'},
          {'fname': 'f', 'lname': '4'}]

我想找到涵盖所有lname属性的所有不同条目集。例如,期望的结果是:

result = [
             [{'fname': 'a', 'lname': '1'},
              {'fname': 'b', 'lname': '2'},
              {'fname': 'c', 'lname': '3'},
              {'fname': 'e', 'lname': '4'}],

             [{'fname': 'a', 'lname': '1'},
              {'fname': 'b', 'lname': '2'},
              {'fname': 'c', 'lname': '3'},
              {'fname': 'f', 'lname': '4'}],

             [{'fname': 'a', 'lname': '1'},
              {'fname': 'b', 'lname': '2'},
              {'fname': 'd', 'lname': '3'},
              {'fname': 'e', 'lname': '4'}],

             [{'fname': 'a', 'lname': '1'},
              {'fname': 'b', 'lname': '2'},
              {'fname': 'd', 'lname': '3'},
              {'fname': 'f', 'lname': '4'}]
        ]

实现这一目标的最佳方法是什么?

标签: python

解决方案


itertools按照其他人的建议看了看。为我combinations完成了这项工作。看起来结果的顺序是一样的。

from itertools import combinations

combs = combinations(mylist, 4)

result = []
for item in combs:
    x = list(item)
    y = []
    for dic in item:
        y += list(dic.values())
    if len(set(y)) is 8: # lists with duplicate values are excluded 
        result.append(x)

result

推荐阅读