2014-01-23 1 views
3

У меня есть список, а именно: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")] 

Я должен написать функцию, которая дает Dict, который содержит письмо забьет отображение всякий раз, когда приведенный выше список является passed.please мне помочь записывая функцию ... !!

+1

Это питон? – Noctua

+0

@Noctua yes in phyton – Ramya

+0

Что вы попробовали? – RemcoGerlich

ответ

3

Dict понимание с двумя 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 

Bonus слова оценка калькулятор:

>>> word = 'QUICK' 
>>> sum(letter_score[c] for c in word) 
20 

где word это прописная строка, содержащая только (Эрудит букву), игнорируя двойную и тройную букву скоринг.

0

В 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 
... 

В питона, вы можете расщепляет строки, содержащие пробелы в этих пространствах:

>>> "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. 
1

Другой, более многословным способ:

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 
+0

Идеально приемлемо. – aIKid

+1

OP явно задал вопрос о понимании dict в вопросе: p – thefourtheye

+0

Кроме того, 'str.split()' по умолчанию разделяет пробелы. Почему явный раскол на '' ''? –

0

Является ли это то, что вы хотите? Кажется, это то, что вы описываете.

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 
+0

OP явно запросил понимание dict в вопросе: p – thefourtheye

+0

Хотя я согласен с вами, также казалось бы, что он мог бы понимать, как понять, как работает диктовка. так как вы не будете писать функцию для понимания dict. :) – Ajurna

0

Ответ на недискретное понимание.

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 компе, как хорошо, и я уверен, что это то, что ОП будет для, но dict(zip(iter,iter)) это полезное выражение стоит упомянуть.