我想对可能以int或tuple作为键的字典进行双重排序。
d = {33:1, 44:1, (0,5):1 12:2, (1,2):2}我希望它首先按值排序,然后按键排序(如果可能,如果其中一个是元组,第二个是int,则不是)。
有人能帮我吗?
提前感谢
发布于 2014-01-01 17:48:45
或者只是
sorted(d.items(), key=lambda v: v[::-1])EDIT:,因为OP需要字典形式的结果
OrderedDict(sorted(d.items(), key=lambda v: v[::-1]))发布于 2014-01-01 17:54:06
>>> d = {33:1, 44:1, (0,5):1, 12:2, (1,2):2}
>>> {k:v for k,v in sorted(d.items(), key=lambda v: v[::-1])}
{(1, 2): 2, 33: 1, 44: 1, (0, 5): 1, 12: 2}
>>> from collections import OrderedDict
>>> OrderedDict({k:v for k,v in sorted(d.items(), key=lambda v: v[::-1])})
OrderedDict([((1, 2), 2), (33, 1), (44, 1), ((0, 5), 1), (12, 2)])
>>> sorted(d.items(), key=lambda v: v[::-1])
[(33, 1), (44, 1), ((0, 5), 1), (12, 2), ((1, 2), 2)]发布于 2014-01-01 17:43:04
这个怎么样?
>>> d = {33:1, 44:1, (0,5):1, 12:2, (1,2):2}
>>> helper_dict = {}
>>> for k,v in d.items():
helper_dict.setdefault(v,[]).append(k)
>>> sorted_items = [(k,i) for k in sorted(helper_dict.keys()) for i in sorted(helper_dict[k]) ]
>>> sorted_items
[(1, 33), (1, 44), (1, (0, 5)), (2, 12), (2, (1, 2))]https://stackoverflow.com/questions/20867181
复制相似问题