我在python中有一个字典,看起来像这样:
raw = {'id1': ['KKKK', 'MMMMMMMMMMMMMMM'], 'id2': ['KKKKM', 'KKKKKK']}
如您所见,值是列表。我想用一个得分的数字替换列表。我根据长度为列表中的每个字符打分。如果长度是4到9他们会得到1,从10到15将是2和16和更长会得到3.然后我加上每个id的所有得分并且每个id有一个得分。这是一个小例子:
score = {'id1': 3, 'id2': 2}
我试过这段代码:
score = {}
for val in raw.values():
for i in val:
if len(i) >=4 and len(i) <9:
sc = 1
elif len(i) >=10 and len(i) <15:
sc = 2
else:
sc = 3
score[raw.keys()] = sc
它没有给出我想要的东西。
答案 0 :(得分:0)
我在你的例子中看到两个问题。
首先是分数没有增加。您应该在外部循环中初始化计数器,并在迭代密钥中的项目时递增它。
for val in raw.values():
score = 0
for i in val:
...
score += 1 # or 2 or 4
第二个问题是您需要在存储乐谱时访问您正在评分的特定键。由于“raw.keys()”返回所有键的列表,因此在存储值时使用它是没有意义的。 相反,你的外部循环应该遍历键和值,从而让你知道你当前使用的是什么键。
for key, val in raw.items():
....
总结一下,这是一个有效的例子:
score = {}
for key, val in raw.items(): # iterating over both key and value (.items instead of .values)
cur_score = 0 # initializing the current score counter
for item in val: # use readable names!
item_len = len(item) # calculated once for efficiency
if 4 <= item_len < 9: # the python way to check value in range
cur_score += 1
elif 10 <= item_len < 15:
cur_score += 2
else:
cur_score += 3
score[key] = cur_score
玩得开心!
答案 1 :(得分:0)
您尝试使用整个键列表作为字典的索引。此外,您将该分配放在两个循环中。您在每次迭代时期望做什么?
首先,你的外部循环必须遍历字典元素列表,而不仅仅是值。你需要这样的东西:
for key, val in raw.iteritems():
接下来,您需要维护各个字符串的分数的运行总计。你应该看一下......但基本的想法是
total = 0
for item in my_list: # you have to determine what my_list should be
sc = # score for that item
total += sc
......最后,在这个循环之后......
score[key] = total
这应该让你前进。
答案 2 :(得分:0)
您需要遍历字典的所有键值对,并维护字典值的每个元素的分数的运行总计(在您的情况下是一个列表)。
您可以按如下方式改造代码,以获得所需的输出。
raw = {'id1': ['KKKK', 'MMMMMMMMMMMMMMM'], 'id2': ['KKKKM', 'KKKKKK']}
score = {}
# iterating through all the key, value pairs of the dictionary
for key, value in raw.items():
sc = 0
# iterating through all the elements of the current value
for item in value:
if len(item) >=4 and len(item) <=9:
sc += 1
elif len(item) >=10 and len(item) <=15:
sc += 2
else:
sc += 3
score[key] = sc
print(score)
输出:
{'id1': 3, 'id2': 2}
因此,循环for key, value in raw.items():
针对字典的每个键值对运行'id1': ['KKKK', 'MMMMMMMMMMMMMMM']
和'id2': ['KKKKM', 'KKKKKK']
。
然后嵌套循环for item in value:
为两个字典键的值['KKKK', 'MMMMMMMMMMMMMMM']
和['KKKKM', 'KKKKKK']
运行两次。