Python字典循环中复用变量x输出不同值的技术求助
问题分析与解决
你的代码问题出在:外层循环遍历mylist时,每次计算的x会被后续循环覆盖,而且你在循环内部用字典推导式重新遍历整个mylist,此时推导式里的x其实是当前循环迭代到的最后一个x值,最终所有键都会被赋值为最后一次循环计算出的平均值。
要复用x变量同时得到正确结果,有两种可行方式:
方式一:循环逐个赋值
先初始化空字典,遍历mylist的每一组键值对,计算对应x后直接添加到字典中,这样每个键都会对应自己的平均值:
mylist = {('Jack', 'Grace', 8, 9, '15:00'): [0, 1, 1, 5], ('William', 'Dawson', 8, 9, '18:00'): [1, 2, 3, 4], ('Natasha', 'Jonson', 8, 9, '20:45'): [0, 1, 1, 2] } mydict = {} for key, value in mylist.items(): x = sum(value) / len(value) mydict[key] = x print(mydict)
方式二:封装计算逻辑到函数,复用在推导式中
如果还是想用字典推导式,可以把计算平均值的逻辑封装成函数,这样既实现了逻辑复用,又保持推导式的简洁:
def calculate_avg(lst): return sum(lst) / len(lst) mylist = {('Jack', 'Grace', 8, 9, '15:00'): [0, 1, 1, 5], ('William', 'Dawson', 8, 9, '18:00'): [1, 2, 3, 4], ('Natasha', 'Jonson', 8, 9, '20:45'): [0, 1, 1, 2] } mydict = {key: calculate_avg(value) for key, value in mylist.items()} print(mydict)
这两种方式都能让每个键对应自己的平均值,同时实现了逻辑的复用。
内容的提问来源于stack exchange,提问作者user20812299
相关产品推荐
相关产品推荐

