循环向字典添加项目

2024-05-19 12:04:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用while循环为每个键添加dictionary的[2]项。第[2]项是花费的钱

movies = {
   1:('The Shawshank Redemption' , 'Bob', 25, 5),
   2:('The Godfather', 'Kelly', 25, 4),
   3:('The Dark Knight', 'Tyler', 25, 3),
   4:('12 Angry Men', 'Bob', 25, 4),
   5:('The Shawshank Redemption' , 'Bill', 35, 4),
   6:('The Godfather', 'Sally', 35, 5),
   7:('The Dark Knight', 'Suzy', 19, 5),
   8:('12 Angry Men', 'Frank', 19, 3),
   9:('The Shawshank Redemption' , 'Sally', 35, 5),
   10:('The Godfather', 'Leslie', 40, 2),
   11:('The Green Knight', 'Tom', 35, 2),
   12:('14 Angry Men', 'Kaitlyn', 25, 4)}

下面是我的代码:

spent = 0
x = 1
while spent > 0:
   spent += movies[x][2]
   x += 1
else:
   print ('The total money spent is:', spent)

它似乎没有循环或添加,我是新的,提前感谢


Tags: thedictionarymoviessallybobdarkwhileknight
3条回答

我们希望尽可能避免while循环,在这种情况下,您可以使用for循环,遍历所有项并求和与您的方法相同的值,只需更改循环类型即可

spent = 0
for i in movies:
    spent += movies[i][2]
chrx@chrx:~/python/stack$ python3.7 sum.py 
343

为了好玩,用reduce做了这个,没必要

from functools import reduce
spent = reduce((lambda x, y: x + y), (movies[i][2] for i in movies))

spent初始化为0

因此条件spent > 0不是真的,所以循环不会执行

问题出在你的情况下。您将“花费”设置为0,然后说,虽然它大于0,但应该将每个电影的花费相加

您应该做的是在x小于max键时设置要添加的条件。只需调用max(movies.keys())即可获得

这个解决方案应该不难实现。我不会提供代码解决方案,因为这感觉像解决你的家庭作业,但改变我的建议,它应该工作的条件

另外,正如在评论中所建议的那样,给你的movies列一个清单会比写一个dict更好

相关问题 更多 >

    热门问题