使用元组作为值对dict进行排序

Til*_*ill 4 python sorting

我有一个看起来像这样的结构:

{'key_info':(rank,raw_data1,raw_data2),'key_info2':....}
Run Code Online (Sandbox Code Playgroud)

基本上我需要按照排序顺序返回键列表,该列表基于元组中的排名字段进行排序.

我的代码现在看起来像这样(diffs是上面结构的名称):

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

当我运行它时,现在返回此:

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

我希望有人可以从中得到一点意义并帮助我.

编辑:

我改成了:

  def _sortRanked(self):
    return sorted(self.diffs.keys(), key=lambda x: self.diffs[x][0], reverse=True)
Run Code Online (Sandbox Code Playgroud)

我现在得到一个奇怪的命令,它返回数据.顺序是(摘录,并按照上面相同的字段顺序):

R : 3.64486899669e-05 3605 11
P : 3.11612504885e-05 1528 4
C : 2.50018364323e-05 2316 7
Q : -3.49014288804e-05 152 2
T : -4.45535602789e-05 2623 11
Z : -0.000101817241062 491 6
q : -0.000301208352276 1812 19
Run Code Online (Sandbox Code Playgroud)

完整输出:http://pastebin.com/e4eTYvgN

sen*_*rle 6

keys() 只提供键而不是值,因此如果要对它们进行排序,则必须使用键从dict中检索值:

return sorted(self.diffs.keys(), key=lambda x: self.diffs[x], reverse=True)
Run Code Online (Sandbox Code Playgroud)

由于您正在排序rank,这是元组中的第一项,因此您无需指定要排序的值元组中的哪个项目.但如果你想排序raw_data1:

return sorted(self.diffs.keys(), key=lambda x: self.diffs[x][1], reverse=True)
Run Code Online (Sandbox Code Playgroud)