为什么len函数在某些迭代中返回2,而它们的长度都相同?

2024-06-18 11:50:46 发布

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

from datetime import date

score_list = [
{ 2:date(2018,10,20), 5:date(2018,11,8), 0:date(2018,12,25),},
{ 3:date(2018,10,20), 1:date(2018,11,8), 4:date(2018,12,25),},
{ 0:date(2018,10,20), 1:date(2018,11,8), 0:date(2018,12,25),},
{ 2:date(2018,10,20), 7:date(2018,11,8), 3:date(2018,12,25),},
{ 0:date(2018,10,20), 0:date(2018,11,8), 6:date(2018,12,25),},
]

total = []
ave_total = []
ite=0

for i in score_list:
    sum = 0
    for key in i:
        sum+= key
    total.append(sum) 

print (total)

for j in total:
    **t = len(score_list[ite])
    ave = j/t
    print (t)**
    print (ite)
    ite += 1
    ave_total.append(ave) 
    print (ave)

print (ave_total)

在尝试使用print调试出错的地方时,我注意到有时t返回2,而它们的长度都相同(3)


Tags: keyinfromimportfordatetimedatelist
1条回答
网友
1楼 · 发布于 2024-06-18 11:50:46

字典里的键是唯一的,你别无选择。例如:

{ 0:date(2018,10,20), 1:date(2018,11,8), 0:date(2018,12,25),},

只给出2键,因为0是重复的

编辑: 你需要重新构造你的数据,因为你将失去任何重复的方式定义它现在。有几种方法可以解决这个问题,这里有一种:

from datetime import date

score_list = [
{ 2:date(2018,10,20), 5:date(2018,11,8), 0:date(2018,12,25),},

{ 3:date(2018,10,20), 1:date(2018,11,8), 4:date(2018,12,25),},

#{ 0:date(2018,10,20), 1:date(2018,11,8), 0:date(2018,12,25),},
{ 0:[date(2018,10,20), date(2018,12,25)], 1:date(2018,11,8), },

{ 2:date(2018,10,20), 7:date(2018,11,8), 3:date(2018,12,25),},

#{ 0:date(2018,10,20), 0:date(2018,11,8), 6:date(2018,12,25),},
{ 0:[date(2018,10,20), date(2018,11,8)], 6:date(2018,12,25),},
]

这使得具有重复值的键使用list

这意味着你简单的len()已经不够了:

total = []
ave_total = []
ite = 0


for i in score_list:

    sum = 0

    for key in i:
        sum += key

    total.append(sum)

print(total)

for j in total:

    t = 0
    for val in score_list[ite].values():
        if isinstance(val, list):
            t += len(val)
        else:
            t += 1

    #t = len(score_list[ite])

    ave = j/t

    ite += 1

    ave_total.append(ave)

    print (ave)

print (ave_total)

如果将每个值创建为一个列表,则可以简化此过程

相关问题 更多 >