Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字典中4和3个元素的组合_Python_Dictionary_Combinations - Fatal编程技术网

Python 字典中4和3个元素的组合

Python 字典中4和3个元素的组合,python,dictionary,combinations,Python,Dictionary,Combinations,我需要把一本学生成绩字典分成4人组和3人组的所有可能组合 到目前为止我有 from itertools import combinations student_scores = {"A": 68, "B": 77, "C": 82, "D": 85, "E": 53, "F": 64, "G": 71} groups_of_4 = list(map(dic

我需要把一本学生成绩字典分成4人组和3人组的所有可能组合

到目前为止我有

from itertools import combinations

student_scores = {"A": 68, "B": 77, "C": 82, "D": 85, "E": 53, "F": 64, "G": 71}
groups_of_4 = list(map(dict, combinations(student_scores.items(), 4)))
当我试图得到这些四人小组的称赞时,麻烦就来了。这似乎涉及到某种字典差异运算符,但我的研究并没有给出任何关于如何实现这一点的明确答案——一些答案说我需要使用集合,而另一些则不需要

我最好的办法就是

print(groups_of_4[0], {k: v for k, v in student_scores.items() if k not in groups_of_4[0]})
给出一个组合,但我看不出如何修改它以适用于所有组合,特别是因为字典理解只检查单个项目


非常感谢您提供的任何帮助。

您必须使用
dict.items
对象的
set
差分操作找到补码,并将它们转换回
dict

>>> from itertools import combinations

>>> groups_of_4 = list(map(dict, combinations(student_scores.items(), r=4)))

>>> groups_of_3 = [dict(student_scores.items() - other.items()) for other in groups_of_4]

>>> groups_of_3
[{'G': 71, 'E': 53, 'F': 64},
 {'G': 71, 'F': 64, 'D': 85},
 {'G': 71, 'E': 53, 'D': 85},
 {'E': 53, 'F': 64, 'D': 85},
 {'G': 71, 'F': 64, 'C': 82},
 ...
 {'G': 71, 'B': 77, 'A': 68},
 {'F': 64, 'B': 77, 'A': 68},
 {'E': 53, 'B': 77, 'A': 68},
 {'D': 85, 'B': 77, 'A': 68},
 {'B': 77, 'C': 82, 'A': 68}]

您可以在中找到有关如何在中实现
设置
属性的详细信息,我不确定您的目标,但以下内容(对于4人一组)看起来很有希望:

from itertools import combinations

def complement(group, scores):
    diff = scores.keys() - group.keys()
    return {k: scores[k] for k in diff}


student_scores = {"A": 68, "B": 77, "C": 82, "D": 85, "E": 53, "F": 64, "G": 71}
groups_of_4 = list(map(dict, combinations(student_scores.items(), 4)))

for group in groups_of_4:
    print(group, 'complement', complement(group, student_scores))
输出:

{'A': 68, 'B': 77, 'C': 82, 'D': 85} complement {'E': 53, 'F': 64, 'G': 71}
{'A': 68, 'B': 77, 'C': 82, 'E': 53} complement {'F': 64, 'G': 71, 'D': 85}
{'A': 68, 'B': 77, 'C': 82, 'F': 64} complement {'E': 53, 'G': 71, 'D': 85}
{'A': 68, 'B': 77, 'C': 82, 'G': 71} complement {'E': 53, 'F': 64, 'D': 85}
{'A': 68, 'B': 77, 'D': 85, 'E': 53} complement {'C': 82, 'F': 64, 'G': 71}
{'A': 68, 'B': 77, 'D': 85, 'F': 64} complement {'C': 82, 'E': 53, 'G': 71}
{'A': 68, 'B': 77, 'D': 85, 'G': 71} complement {'C': 82, 'E': 53, 'F': 64}
{'A': 68, 'B': 77, 'E': 53, 'F': 64} complement {'C': 82, 'G': 71, 'D': 85}
{'A': 68, 'B': 77, 'E': 53, 'G': 71} complement {'C': 82, 'F': 64, 'D': 85}
{'A': 68, 'B': 77, 'F': 64, 'G': 71} complement {'C': 82, 'E': 53, 'D': 85}
{'A': 68, 'C': 82, 'D': 85, 'E': 53} complement {'B': 77, 'F': 64, 'G': 71}
{'A': 68, 'C': 82, 'D': 85, 'F': 64} complement {'E': 53, 'B': 77, 'G': 71}
{'A': 68, 'C': 82, 'D': 85, 'G': 71} complement {'E': 53, 'B': 77, 'F': 64}
{'A': 68, 'C': 82, 'E': 53, 'F': 64} complement {'B': 77, 'G': 71, 'D': 85}
{'A': 68, 'C': 82, 'E': 53, 'G': 71} complement {'B': 77, 'F': 64, 'D': 85}
{'A': 68, 'C': 82, 'F': 64, 'G': 71} complement {'E': 53, 'B': 77, 'D': 85}
{'A': 68, 'D': 85, 'E': 53, 'F': 64} complement {'C': 82, 'B': 77, 'G': 71}
{'A': 68, 'D': 85, 'E': 53, 'G': 71} complement {'C': 82, 'B': 77, 'F': 64}
{'A': 68, 'D': 85, 'F': 64, 'G': 71} complement {'C': 82, 'E': 53, 'B': 77}
{'A': 68, 'E': 53, 'F': 64, 'G': 71} complement {'C': 82, 'B': 77, 'D': 85}
{'B': 77, 'C': 82, 'D': 85, 'E': 53} complement {'F': 64, 'G': 71, 'A': 68}
{'B': 77, 'C': 82, 'D': 85, 'F': 64} complement {'E': 53, 'G': 71, 'A': 68}
{'B': 77, 'C': 82, 'D': 85, 'G': 71} complement {'E': 53, 'F': 64, 'A': 68}
{'B': 77, 'C': 82, 'E': 53, 'F': 64} complement {'G': 71, 'D': 85, 'A': 68}
{'B': 77, 'C': 82, 'E': 53, 'G': 71} complement {'F': 64, 'D': 85, 'A': 68}
{'B': 77, 'C': 82, 'F': 64, 'G': 71} complement {'E': 53, 'D': 85, 'A': 68}
{'B': 77, 'D': 85, 'E': 53, 'F': 64} complement {'C': 82, 'G': 71, 'A': 68}
{'B': 77, 'D': 85, 'E': 53, 'G': 71} complement {'C': 82, 'F': 64, 'A': 68}
{'B': 77, 'D': 85, 'F': 64, 'G': 71} complement {'C': 82, 'E': 53, 'A': 68}
{'B': 77, 'E': 53, 'F': 64, 'G': 71} complement {'C': 82, 'D': 85, 'A': 68}
{'C': 82, 'D': 85, 'E': 53, 'F': 64} complement {'B': 77, 'G': 71, 'A': 68}
{'C': 82, 'D': 85, 'E': 53, 'G': 71} complement {'B': 77, 'F': 64, 'A': 68}
{'C': 82, 'D': 85, 'F': 64, 'G': 71} complement {'E': 53, 'B': 77, 'A': 68}
{'C': 82, 'E': 53, 'F': 64, 'G': 71} complement {'B': 77, 'D': 85, 'A': 68}
{'D': 85, 'E': 53, 'F': 64, 'G': 71} complement {'C': 82, 'B': 77, 'A': 68}

一组的“赞美”是什么?相对于整个集合,我指的是原始词典,如果去掉4个元素,我非正式地指的是剩下的赞美。这很让人困惑吗?不,我想不会。我认为没有什么比你已经拥有的更好的了。为什么不呢,
dict.items()
对象支持
set
操作。