Python 字典中4和3个元素的组合
我需要把一本学生成绩字典分成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
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
操作。