2014-01-30 76 views
0

我想按列表列表排序字典。列表 列表中的項目是字典中的鍵。按升序排列列表中的字典

喜歡的東西:

sort_by_increasing_order(['d', 'e', 'f'], {'d': [0, 1], 'e': [1, 2, 3], 'f': [4]}) 
result: ['f', 'e', 'd'] 

我的輸入列表是:

[ 
['why', 'was', 'cinderella', 'late', 'for', 'the', 'ball', 'she', 'forgot', 'to', 'swing', 'the', 'bat'], 
['why', 'is', 'the', 'little', 'duck', 'always', 'so', 'sad', 'because', 'he', 'always', 'sees', 'a', 'bill', 'in', 'front', 'of', 'his', 'face'], 
['what', 'has', 'four', 'legs', 'and', 'goes', 'booo', 'a', 'cow', 'with', 'a', 'cold'], 
['what', 'is', 'a', 'caterpillar', 'afraid', 'of', 'a', 'dogerpillar'], 
['what', 'did', 'the', 'crop', 'say', 'to', 'the', 'farmer', 'why', 'are', 'you', 'always', 'picking', 'on', 'me'] 
] 

我的字典裏有些看起來是這樣的:

{'to': [7, 11, 17, 23, 24, 25, 26, 33, 34, 37, 39, 41, 47, 48, 53, 56], 
'jam': [20], 'black': [5], 'farmer': [11], 
'woodchuck': [54], 'has': [14, 16, 51], 'who': [16] 
} 

我有什麼打算是

def sort_by_increasing_order(mylist, myDict): 
     #temp = sorted(myDict, key=myDict.get) 
     temp = sorted(myDict, key=lambda tempKey: for tempKey in mylist, reverse=True) 
     return temp 

輸出將是這樣的:

sort_by_increasing_order(mylist, myDict) 
    >> ['to','woodchuck','has','jam','who','farmer','black'] 

的註釋行剛剛通過排序的字典鍵,當我試圖通過列表進行排序。 我的方法不正確。結果應該是如上所述的具有指數長度 的遞增順序的列表。任何想法

+0

增加什麼樣的順序?爲什麼在你的例子中'f'首先? – user2357112

+0

我更新了樣本字典。字典中索引長度的增加順序等等是否澄清? – user3247054

+0

@ user2357112有什麼建議嗎? – user3247054

回答

0

在代碼列表中理解語法錯誤,試試這個,

def sort_by_increasing_order(mylist, myDict): 
     temp = sorted(myDict, key=lambda tempKey: [tempKey for tempKey in mylist], reverse=True) 
     return temp 
+0

它修復了語法錯誤,但我沒有得到具有最高順序的結果等。 – user3247054

2

它看起來像你正試圖通過在字典中的列表的長度排序。這是你將如何做到這一點:

def sort_by_increasing_order(l, d): 
    return sorted(l, key=lambda i: len(d[i])) 

然而,我會建議你使用更清晰的命名方案。

+0

感謝您的回答,您的建議不起作用。我得到這個錯誤TypeError:不可用類型:'列表'。我有名單。 – user3247054

+0

@ user3247054:您沒有傳入示例中的列表列表。 – user2357112

+0

@chthonicdaemon這只是爲了傳達我想要實現的目標等,這就是爲什麼我給我的輸入列表和字典的示例澄清等。 – user3247054

1

我只是用你的輸入列表來實現它...

source = [ 
['why', 'was', 'cinderella', 'late', 'for', 'the', 'ball', 'she', 'forgot', 'to', 'swing', 'the', 'bat'], 
['why', 'is', 'the', 'little', 'duck', 'always', 'so', 'sad', 'because', 'he', 'always', 'sees', 'a', 'bill', 'in', 'front', 'of', 'his', 'face'], 
['what', 'has', 'four', 'legs', 'and', 'goes', 'booo', 'a', 'cow', 'with', 'a', 'cold'], 
['what', 'is', 'a', 'caterpillar', 'afraid', 'of', 'a', 'dogerpillar'], 
['what', 'did', 'the', 'crop', 'say', 'to', 'the', 'farmer', 'why', 'are', 'you', 'always', 'picking', 'on', 'me'] 
] 

# words you want to order in order of their number ov appearances 
words = ['to','woodchuck','has','jam','who','farmer'] 

sorted(words, key = lambda word: sum(1 for lst in source if word in lst), reverse=True) 

Out[38]: ['to', 'has', 'farmer', 'woodchuck', 'jam', 'who'] 
+0

感謝您的答案。爲什麼總結和爲什麼1總和。你能解釋一下嗎?我認爲黑人應該在那裏。 – user3247054

+0

@ user3247054每當有一個包含這個單詞的列表,我就加上'1'。或者我計算包含這個詞的列表,那是什麼'sum(...)'做的...(推薦?更多解釋?) – koffein