我坚持如何正确地解决这个问题,以下是:
如果我们有以下值,该怎么办:
{('A','B','C','D'):3,
('A','C','B','D'):2,
('B','D','C','A'):4,
('D','C','B','A'):3,
('C','B','A','D'):1,
('C','D','A','B'):1}
当我们总结第一名的值时:[5,4,2,3](首先选择A人5人,首先选择B人4人,依此类推A = 5,B = 4,C = 2,D = 3)
任何字母表的最大值为5,不是多数(5/14小于一半),其中14是总值的总和。
所以我们用最少的首选选项删除字母表。在这种情况下是C。
我想要返回一个字典{'A':5, 'B':4, 'C':2, 'D':3}
,而无需导入。
这是我的工作:
def popular(letter):
'''(dict of {tuple of (str, str, str, str): int}) -> dict of {str:int}
'''
my_dictionary = {}
counter = 0
for (alphabet, picks) in letter.items():
if (alphabet[0]):
my_dictionary[alphabet[0]] = picks
else:
my_dictionary[alphabet[0]] = counter
return my_dictionary
这会返回我无法摆脱的密钥副本。
感谢。
答案 0 :(得分:0)
以下内容应该有效:
def popular(letter):
'''(dict of {tuple of (str, str, str, str): int}) -> dict of {str:int}
'''
my_dictionary = {}
for alphabet, picks in letter.items():
if alphabet[0] in my_dictionary:
my_dictionary[alphabet[0]] += picks
else:
my_dictionary[alphabet[0]] = picks
return my_dictionary
示例:
>>> letter = {('A','B','C','D'):3,
... ('A','C','B','D'):2,
... ('B','D','C','A'):4,
... ('D','C','B','A'):3,
... ('C','B','A','D'):1,
... ('C','D','A','B'):1}
>>> popular(letter)
{'A': 5, 'C': 2, 'B': 4, 'D': 3}
可以更简洁地完成此操作
from collections import defaultdict
def popular(letter):
my_dictionary = defaultdict(int)
for alphabet, picks in letter.items():
my_dictionary[alphabet[0]] += picks
return dict(my_dictionary)