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