[英]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.