开发者

Sorting a dict with tuples as values

I have a dictionary that looks like this:

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

Basically I need back a list of the keys in sorted order, that is sorted based on the rank field in the tuple.

开发者_C百科My code looks something like this right now (diffs is the name of the dict above):

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

that right now returns this when I run it:

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


keys() only gives you keys, not values, so you have to use the keys to retrieve values from the dict if you want to sort on them:

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

Since you're sorting on rank, which is the first item in the tuple, you don't need to specify which item in the value tuple you want to sort on. But if you wanted to sort on raw_data1:

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


You're passing the key as the argument to, uh, key.

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


You're attempting to sort on the keys of the dictionary, not the values. Replace your self.diffs.keys() call with self.diffs.items(), and then it should work (but do keep the lambda, or use operator.itemgetter(1). Tuples sort starting with the first element, so you don't have to worry about that.)


Just noticed that you only want the keys. With my suggestion, you'd have to wrap the sort with zip()[0] (making sure to unpack the resultant list of tuples from the sort by prefixing with * in the call to zip()).


You're close. Try this instead:

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

You're sorting a list of keys, so you have to take that key back to the dictionary and retrieve element 1 in order to use it as a comparison value.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜