簡體   English   中英

以元組為值對字典進行排序

[英]Sorting a dict with tuples as values

我有一本看起來像這樣的字典:

{'key_info': (rank, raw_data1, raw_data2),
 'key_info2': ...}

基本上我需要按排序順序返回一個鍵列表,該列表是根據元組中的rank字段排序的。

我的代碼現在看起來像這樣( diffs是上面字典的名稱):

def _sortRanked(self):
    print(type(self.diffs))
    return sorted(self.diffs.keys(), key=lambda x: x[1], reverse=True)

當我運行它時,現在返回這個:

return sorted(self.diffs.keys(), key=lambda x: x[1], reverse=True)
IndexError: string index out of range

keys()只給你鍵,而不是值,所以如果你想對它們進行排序,你必須使用鍵從字典中檢索值:

return sorted(self.diffs.keys(), key=lambda x: self.diffs[x], reverse=True)

由於您正在排序rank ,這是元組中的第一項,因此您不需要指定要排序的值元組中的哪一項。 但是如果你想對raw_data1進行排序:

return sorted(self.diffs.keys(), key=lambda x: self.diffs[x][1], reverse=True)

您將密鑰作為參數傳遞給,呃, key

[k for (k, v) in sorted(D.iteritems(), key=lambda x: x[1], reverse=True)]

您正在嘗試對字典的鍵進行排序,而不是對值進行排序。 將您的self.diffs.keys()調用替換為self.diffs.items() ,然后它應該可以工作(但請保留 lambda,或使用operator.itemgetter(1) 。元組從第一個元素開始排序,因此您不必為此擔心。)


剛剛注意到您只想要鑰匙。 根據我的建議,您必須使用zip()[0]包裝排序(確保通過在對zip()的調用中加上前綴*來從排序中解壓縮元組的結果列表)。

你很接近。 試試這個:

return sorted(self.diffs.keys(), key = lambda x: self.diffs[x][0], reverse = True)

您正在對鍵列表進行排序,因此您必須將該鍵帶回字典並檢索元素 1,以便將其用作比較值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM