Как перебрать строку и для каждой буквы, если она есть в словаре (ключе), добавить значения в новый список? - PullRequest
0 голосов
/ 21 февраля 2019

Что бы я написал для перебора строки и для каждой буквы, если эта буква находится в данном словаре (как ключ), а затем добавить значение этого ключа в пустой список?

Например,Строка 'cat', я хочу найти в заданном словаре c, a и t.Затем для каждого значения каждой буквы добавьте их в новый список, представляющий собой сумму точек (значений).

Я продолжаю получать: TypeError: объект 'NoneType' не повторяется

Вотчто у меня пока что:

user_word = cat

values_dict = {'A' : 1, 'E' : 1, 'I' : 1, 'O' : 1, 'U' : 1, 'L' : 1,\
              'N' : 1, 'N' : 1, 'S' : 1, 'T' : 1, 'R' : 1,\
              'D' : 2, 'G' : 2, 'B' : 3, 'C' : 3, 'M' : 3, 'P' : 3,\
              'F' : 4, 'H' : 4, 'V' : 4, 'W' : 4, 'Y' : 4,\
              'K' : 5, 'J' : 8, 'X' : 8, 'Q' : 10, 'Z' : 10,}

def get_word_value(user_word, values_dict):
    word_pts = 0

    for letter in user_word.upper():
        for key, value in values_dict.items:
            for letter in range(value):
                word_pts = word_pts + values_dict[letter]

                print(word_pts, 'TEST GOOD')
    return word_pts

# expected result is 5 (3+1+1= 5)

Ответы [ 6 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать оператор itemgetter().Это быстрее, чем понимание списка:

from operator import itemgetter

d = {'A': 1, 'T': 1, 'C': 3, 'E': 1}

w = 'cat'
sum(itemgetter(*w.upper())(d))
# 5
0 голосов
/ 21 февраля 2019
user_input = raw_input("Enter Your Word: ")
user_input = user_input.upper()
wordArray = list(user_input)

values_dict = {'A' : 1, 'E' : 1, 'I' : 1, 'O' : 1, 'U' : 1, 'L' : 1,
              'N' : 1, 'N' : 1, 'S' : 1, 'T' : 1, 'R' : 1,
              'D' : 2, 'G' : 2, 'B' : 3, 'C' : 3, 'M' : 3, 'P' : 3,
              'F' : 4, 'H' : 4, 'V' : 4, 'W' : 4, 'Y' : 4,
              'K' : 5, 'J' : 8, 'X' : 8, 'Q' : 10, 'Z' : 10,}

def get_word_value(wordArray, values_dict):
    word_pts = 0
    for letter in wordArray:
        word_pts = word_pts + values_dict[letter]

    print "Word Points: %d, Test Good." % word_pts
get_word_value(wordArray, values_dict)
0 голосов
/ 21 февраля 2019

Я бы посоветовал вам использовать

sum([values_dict.get(letter, 0) for letter in user_word.upper()])

Это позволит избежать ошибки, если ключ не найден.

0 голосов
/ 21 февраля 2019

Вот ваш код исправлен:

    user_word = "cat"

    values_dict = {'A' : 1, 'E' : 1, 'I' : 1, 'O' : 1, 'U' : 1, 'L': 1,
                  'N' : 1, 'S' : 1, 'T' : 1, 'R' : 1,
                  'D' : 2, 'G' : 2, 'B' : 3, 'C' : 3, 'M' : 3, 'P': 3,
                  'F' : 4, 'H' : 4, 'V' : 4, 'W' : 4, 'Y' : 4,
                  'K' : 5, 'J' : 8, 'X' : 8, 'Q' : 10, 'Z' : 10}


    def get_word_value(user_word, values_dict):
        word_pts = 0

        for letter in user_word.upper():
            for key, value in zip(values_dict.keys(), values_dict.values()):
                if letter == key:
                    word_pts += value

        print('Word pts : {} , TEST GOOD'.format(word_pts))
        return word_pts
0 голосов
/ 21 февраля 2019

Вот один вкладыш:

sum([values_dict[letter] for letter in user_word.upper()])

0 голосов
/ 21 февраля 2019

TypeError: 'NoneType' object is not iterable связано со строкой for key, value in values_dict.items:.

dict.items - это функция, а не итерация.Чтобы получить доступ к фактическим значениям, используйте круглые скобки для обозначения ключа и значений: for key, value in values_dict.items():

...