2016-12-11 57 views
0

我試圖過濾字典裏面的一些信息,使用每個鍵的值列表,並且如果有多個值,我們選擇更好的是,這種情況下,如果[1] [3]的位置較高,則相應地排序。在排序後創建一個字典列表中的值和值[0]

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 

雖然IM問,是否有可能更多的值進行排序的情況相比的相等?

感謝您的幫助!

回答

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)) 

(因爲空列表的max爲默認,從與只有1個元素的列表,max是該元素,並且從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功能會做到這一點追加被執行多次,是更短,只是直接寫,而不是隻爲那個功能

+0

再次,非常感謝答覆,但有一個問題,但我不能使用函數如max,min,zip等,唯一允許使用的內置函數被排序和排序..:/還有,如果在排序函數中有任何ideia,如果它們相等,我可以使用多個值? – stasisOo

+0

另外,append不允許我使用多個值,你會建議如何使用它?我可以只取得第一個值(人的名字)而不是最後一部分的所有信息? – stasisOo

+0

在這種情況下,你的關鍵函數需要用你想用來排序的元素來構建一個元組,例如'key = lambda t:(val1,val1,val3,...)',每個valn都是你的東西從't'中提取當然是... – Copperfield

相關問題