簡體   English   中英

如何遍歷字符串,對於每個字母,如果它在字典(鍵)中,則將值添加到新列表中?

[英]How to iterate over a string and for each letter, if it is in a dictionary (key), add values to a new list?

我會寫什么來遍歷一個字符串,並且對於每個字母,如果該字母在給定的字典中(作為鍵),然后將該鍵的值添加到一個空列表中,該怎么寫?

例如,字符串“ 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)

這是一個班輪:

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

我建議你用

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

如果找不到密鑰,這將避免錯誤。

TypeError: 'NoneType' object is not iterable是由於鍵行for key, value in values_dict.items:

dict.items是函數而不是可迭代的。 要訪問實際值,請使用括號對鍵和值進行迭代: for key, value in values_dict.items():

這是您的代碼已更正:

    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
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)

您可以使用運算符itemgetter() 它比列表理解要快:

from operator import itemgetter

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

w = 'cat'
sum(itemgetter(*w.upper())(d))
# 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM