我已经创建了一个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)但是,它给了我一个错误:
Traceback (most recent call last):
File "C:\Users\wei.du\Desktop\real-time\RMLS.py", line 33, in <module>
TaskGenerator(6)
File "C:\Users\wei.du\Desktop\real-time\RMLS.py", line 17, in TaskGenerator
sorted(T,key=lambda x:x['Period'])
File "C:\Users\wei.du\Desktop\real-time\RMLS.py", line 17, in <lambda>
sorted(T,key=lambda x:x['Period'])
TypeError: 'int' object is not subscriptable我认为,在“排序”函数中,在lambda函数中,"x“是一个整数。但我真的不明白,"x“不是Ti的瞬间。为什么它抱怨"x“是一个整数?
发布于 2018-04-02 05:12:41
当您尝试对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该列表才能在函数之外引用该列表。
发布于 2018-04-02 05:07:52
dict上的迭代是在键上进行的,键是int,它是不可订阅的(int上没有['Period'] )。
另外,您没有分配sorted的结果。试一试:
sorted_values = sorted(T.values(), key=lambda x:x['Period'])发布于 2018-04-02 05:01:32
你在试着对字典排序,这是不可能的。你能做的就是用列表代替。
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)样本输出:
[{'ID': 1, 'ExcTime': 17, 'Period': 35, 'Uterlization': 0.4857142857142857}, {'ID': 2, 'ExcTime': 9, 'Period': 29, 'Uterlization': 0.3103448275862069}, {'ID': 3, 'ExcTime': 1, 'Period': 8, 'Uterlization': 0.125}, {'ID': 4, 'ExcTime': 14, 'Period': 18, 'Uterlization': 0.7777777777777778}, {'ID': 5, 'ExcTime': 1, 'Period': 10, 'Uterlization': 0.1}, {'ID': 6, 'ExcTime': 7, 'Period': 8, 'Uterlization': 0.875}]
[{'ID': 3, 'ExcTime': 1, 'Period': 8, 'Uterlization': 0.125}, {'ID': 6, 'ExcTime': 7, 'Period': 8, 'Uterlization': 0.875}, {'ID': 5, 'ExcTime': 1, 'Period': 10, 'Uterlization': 0.1}, {'ID': 4, 'ExcTime': 14, 'Period': 18, 'Uterlization': 0.7777777777777778}, {'ID': 2, 'ExcTime': 9, 'Period': 29, 'Uterlization': 0.3103448275862069}, {'ID': 1, 'ExcTime': 17, 'Period': 35, 'Uterlization': 0.4857142857142857}]https://stackoverflow.com/questions/49605457
复制相似问题