![](/img/trans.png)
[英]Python: How to iterate over a list of dictionaries and add each dictionary as value to a new dictionary with a unique key - no repeats
[英]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.