d = {"a":4, "b":12, "c":2}
如果我使用sorted()和lambda:
s = sorted(d.items(), key=lambda(k,v):(v,k))
我得到一个列表元组(键,值) 但是我又想要一个字谜:
{"c":2, "a":4, "b":12}
正在做dict(the_list_of_tuples)
你回到原点。
答案 0 :(得分:10)
标准dict
对象未排序,因此不保证或保留任何排序。这是因为你通常使用dict得到一个键排序的值是不重要的。
如果您想保留订购,可以使用an OrderedDict
。这没有排序,但确实记住了项目添加到它的顺序。因此,您可以按排序顺序使用键值对创建一个:
>>> d = {"a":4, "b":12, "c":2}
>>> from collections import OrderedDict
>>> od = OrderedDict(sorted(d.items(), key=lambda(k,v):(v,k)))
>>> od
OrderedDict([('c', 2), ('a', 4), ('b', 12)])
答案 1 :(得分:1)
这是不可能的。你只能得到一个你正在获得的字典的有序表示。
修改强>
刚做了一些研究。看起来Python 2.7有一个名为OrderedDict的东西,它允许你这样做。以下是有关它的更多信息:http://docs.python.org/library/collections.html?highlight=ordereddict#ordereddict-examples-and-recipes
答案 2 :(得分:1)
正如许多其他人指出的那样你不能因为python不允许你这样做(除了有序的dicts)。 无论如何你可以实现的是(python< 2.7)
>>> d = {"a":4, "b":12, "c":2}
>>> z = [(i,d[i]) for i in d]
>>> z.sort(key=lambda x: x[1])
>>> z
[('c', 2), ('a', 4), ('b', 12)]
现在d已排序,您可以对其执行二进制搜索以获得您想要的内容(如果您不太关心速度,则可以进行正常迭代)。