“int”对象在lambda python中不可订阅

2024-09-26 23:21:09 发布

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

我已经创建了一个dict列表,我想根据dict中的一个元素(句点)进行排序

T=dict()
def TaskGenerator(N):
    for i in range (0,N):
        ExcTime=randint(1,20)
        Period=randint(1,20)+ExcTime
        Uterlization=ExcTime/Period
        T[i]={'ID':i+1 , 'ExcTime' : ExcTime, 'Period' : Period, 'Uterlization':Uterlization}
    sorted(T,key=lambda x:x['Period'])
TaskGenerator(6)

但是,它给了我一个错误:

^{pr2}$

我认为这意味着在“排序”函数中,在lambda函数中,“x”是一个整数。但我真的不明白,“x”不是t[I]的瞬间吗(例如t[1],在python中是dict类型的)。为什么它抱怨“x”是个整数?在


Tags: lambda函数元素列表for排序def整数
3条回答

你在整理字典,这是不可能的。你能做的是用列表代替。在

def TaskGenerator(N):
    T=[]
    for i in range (0,N):
        ExcTime=randint(1,20)
        Period=randint(1,20)+ExcTime
        Uterlization=ExcTime/Period
        T.append({'ID':i+1 , 'ExcTime' : ExcTime, 'Period' : Period, 'Uterlization':Uterlization})
    print(T)
    T = sorted(T,key=lambda x:x['Period'])
    print(T)

TaskGenerator(6)

样本输出:

^{pr2}$

dict上的迭代在键上,这些键是不可下标的int(int上没有['Period'])。在

另外,您没有分配sorted的结果。试试这个:

sorted_values = sorted(T.values(), key=lambda x:x['Period'])

当您尝试对dict排序时,得到的是键。由于您的键都是整数,sorted会根据您提供的key按正确的顺序给您。但是,您需要的是按排序顺序排列的dict的元素。要获取元素,可以使用T.values()。在

使用这些值,TaskGenerator()函数将如下所示

from random import randint

T=dict()
def TaskGenerator(N):
    for i in range (0,N):
        ExcTime=randint(1,20)
        Period=randint(1,20)+ExcTime
        Uterlization=ExcTime/Period
        T[i]={'ID':i+1 , 'ExcTime' : ExcTime, 'Period' : Period, 'Uterlization':Uterlization}
    return sorted(T.values(), key=lambda x:x['Period'])
TaskGenerator(6)

请注意,T.values()生成一个新的项列表,您必须return该列表才能在函数之外引用它。在

相关问题 更多 >

    热门问题