我有一个清单:
scrabble_scores = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"),
(4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z")]
每当通过上述列表时,我必须编写一个函数,该函数给出一个包含一个字母到分数映射的字典。请帮助我编写函数...!
我有一个清单:
scrabble_scores = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"),
(4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z")]
每当通过上述列表时,我必须编写一个函数,该函数给出一个包含一个字母到分数映射的字典。请帮助我编写函数...!
for
有两个循环的字典理解:
letter_score = {letter: score for score, letters in scrabble_scores
for letter in letters.split()}
例如,对于字符串中的每个字母(由空格分隔),在输出字典中生成一个键值对;关键是字母,值是分数。
演示:
>>> scrabble_scores = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"),
... (4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z")]
>>> letter_score = {letter: score for score, letters in scrabble_scores
... for letter in letters.split()}
>>> letter_score
{'A': 1, 'C': 3, 'B': 3, 'E': 1, 'D': 2, 'G': 2, 'F': 4, 'I': 1, 'H': 4, 'K': 5, 'J': 8, 'M': 3, 'L': 1, 'O': 1, 'N': 1, 'Q': 10, 'P': 3, 'S': 1, 'R': 1, 'U': 1, 'T': 1, 'W': 4, 'V': 4, 'Y': 4, 'X': 8, 'Z': 10}
>>> letter_score['Q']
10
奖金词得分计算器:
>>> word = 'QUICK'
>>> sum(letter_score[c] for c in word)
20
其中word
是仅包含(拼字游戏)字母的大写字符串,忽略双字母和三字母评分。
另一种更详细的方式:
def makeScoreDict(scrabble_scores):
score_dict = {}
for row in scrabble_scores:
for letter in row[1].split():
score_dict[letter] = row[0]
return score_dict
这是你想要的吗?好像是你描述的。
scrabble_scores = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"),
(4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z")]
out_dict = {}
for score in scrabble_scores:
val = score[0]
for letter in score[1].split():
out_dict[letter] = val
print out_dict
一个非字典理解的答案。
scrabble_scores = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"),
(4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z")]
d = dict()
for value,letters in scrabble_scores:
d.update(dict(zip(letters.split(),[value]*len(letters.split())))
我肯定也会把它作为一个 dict comp 来做,我确信这就是 OP 的目的,但这dict(zip(iter,iter))
是一个值得一提的有用表达。
在 python 中,您可以像这样循环对:
for score, letters in scrabble_scores:
print("{}: {}".format(letters, score))
这将给出结果:
"E A O I N R T L S U": 1
"D G": 2
...
在 python 中,您可以在这些空格上拆分包含空格的字符串:
>>> "E A O I N R T L S U".split()
['E', 'A', 'O', 'I', 'N', 'R', 'T', 'L', 'S', 'U']
现在只需将两者结合起来:
for score, letters in scrabble_scores:
for letter in letters.split():
# voila, you've got score and letter.