繁体   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