我试图使用每个键的值列表来过滤dict中的一些信息,如果有超过1个值,我们选择更好的一个,就是这种情况,如果[1] [3]位置越高,其排序也相应。
for key, value in dic.items():
if len(value) < 1:
newList.append(TranslatorToTask('NOTAssigned', key))
if len(value) == 1:
newList.append(TranslatorToTask(value[0], key))
if len(value) > 1:
for v in dic.values():
v.sort(key=lambda t: float(t[1][3]), reverse = True)
newList.append(TranslatorToTask(value[0], key))
但是,当我打印newList时,它会出现如下:
除了不返回第一个位置翻译器的else语句之外的所有工作,也会再运行3次。
有关预期结果的信息:和使用过的功能:
def TranslatorToTask(translator, task):
newList = [translator, task]
return newList
虽然即时通讯询问,如果比较的值相等,是否有可能将其他值排序?
感谢您的帮助!
答案 0 :(得分:0)
这部分
for v in dic.values():
v.sort(key=lambda t: float(t[1][3]), reverse = True)
我在你的另一个问题中给你的是对整个字典中的每个元素进行排序,在本地使用,因为你想在这里使用它,你只需要排序部分
for key, value in dic.items():
if len(value) < 1:
newList.append(TranslatorToTask('NOTAssigned', key))
if len(value) == 1:
newList.append(TranslatorToTask(value[0], key))
if len(value) > 1:
value.sort(key=lambda t: float(t[1][3]), reverse = True) #<-- only the sort
newList.append(TranslatorToTask(value[0], key))
或者您只想要t[1][3]
值最大的元素,您可以使用max(或min作为另一个极端)函数,它也接受一个关键函数,如这个
max( value, key=lambda t: float( t[1][3] )
导致此
for key, value in dic.items():
if len(value) < 1:
newList.append(TranslatorToTask('NOTAssigned', key))
if len(value) == 1:
newList.append(TranslatorToTask(value[0], key))
if len(value) > 1:
newList.append( TranslatorToTask( max( value, key=lambda t: float(t[1][3])), key) )
它也接受一个默认值,以防你给它的列表为空,这是你从中得到的值,它可以将这段代码减少到这个:
for key, value in dic.items():
newList.append( TranslatorToTask( max( value, key=lambda t: float(t[1][3]), default='NOTAssigned'), key ) )
(因为空列表的最大值是默认值,只有1个元素的列表中的最大值是该元素,而具有2个或更多元素的列表中的最大值是好的,根据键函数的最大值)
错误就在这里
for key, value in dic.items():
...
if len(value) > 1:
for v in dic.values():
v.sort(key=lambda t: float(t[1][3]), reverse = True)
newList.append(TranslatorToTask(value[0], key)) #<---here
此附加执行的次数与字典中的键一样多次
这也就是TranslatorToTask
函数会做的所有事情,只是直接编写它而不是只为那个函数创建函数