在dicts上使用groupby的Python

在dicts上使用groupby的Python,python,list,dictionary,Python,List,Dictionary,给定一个dict作为输入,输出应如下所示(必须对具有公共元素的键进行分组)。我一直在尝试使用groupby来完成这项工作,但是,我无法找到答案。你们能帮忙吗?groupby文档对我来说有点难理解 input = {'c1': ['f1', 'f2', 'f3'], 'c2': ['f2'], 'c3': ['f4'], 'c4': ['f5', 'f4'], 'c5': ['f3'], 'c6': ['f

给定一个dict作为输入,输出应如下所示(必须对具有公共元素的键进行分组)。我一直在尝试使用groupby来完成这项工作,但是,我无法找到答案。你们能帮忙吗?groupby文档对我来说有点难理解

input = {'c1': ['f1', 'f2', 'f3'], 
         'c2': ['f2'],
         'c3': ['f4'],
         'c4': ['f5', 'f4'],
         'c5': ['f3'],
         'c6': ['f6']}
output = [['c1', 'c2', 'c5'], ['c3', 'c4'], ['c6']]

请检查这个。看起来不是很干净的解决方案。但效果是:) 我用集合来检查dict的值是否有共同点。我将检查
groupby
是如何做到这一点的

input_list = [{'c1': ['f1', 'f2', 'f3']}, {'c2': ['f2']}, {'c3': ['f4']}, {'c4': ['f5', 'f4']}, {'c5': ['f3']}, {'c6': ['f6']} ]

result_list = []

for input_item in input_list:
    input_key, input_value = input_item.items()[0]
    if not result_list:
        result_list.append([[input_key], input_value])
        continue
    for index, result_item in enumerate(result_list):
        result_keys, result_value = result_item
        if set(result_value).intersection(input_value):
            result_keys.append(input_key)
            result_list[index] = [result_keys, list(set(result_value).union(input_value))]
            break
    else:
        result_list.append([[input_key], input_value])

print [result[0] for result in result_list]  #prints [['c1', 'c2', 'c5'], ['c3', 'c4'], ['c6']]

你最好清楚地解释一下输入和输出之间的逻辑关系

input = {'c1': ['f1', 'f2', 'f3'], 
         'c2': ['f2'],
         'c3': ['f4'],
         'c4': ['f5', 'f4'],
         'c5': ['f3'],
         'c6': ['f6']}

result = []
founded = set()
for k,v in input.items():
    res = set()
    res.add(k)

    for l,m in input.items():
        if set(v) - set(m) != set(v):
            founded.add(l)
            res.add(l)
    for r in result:
        if res.issubset(r):
            res = None
            break
    if res: result.append(res)
print result

所以你的输入是一个字典列表,每个字典都有一个单一的(但不同的)键?你如何从你的输入到输出——那里的逻辑是什么?我假设……在dict的值列表中有一些元素是常见的。e、 g
f2
在“c1”和“c2”中很常见。您能解释一下输出中键分组背后的逻辑吗?它与否有关?