python:任意顺序

时间:2009-03-23 15:33:24

标签: python sql-order-by

在Oracle SQL中,有一个要按如下顺序排序的功能:

order by decode("carrot" = 2
               ,"banana" = 1
               ,"apple" = 3)

在python中实现它的最佳方法是什么?

我希望能够通过其键来命令一个字典。而且该顺序不一定按字母顺序或任何其他顺序 - 我确定顺序。

6 个答案:

答案 0 :(得分:15)

使用key的{​​{1}}命名关键字参数。

sorted()

为了获得比#set up the order you want the keys to appear here order = ["banana", "carrot", "apple"] # this uses the order list to sort the actual keys. sorted(keys, key=order.index) 更高的效果,您可以使用list.index代替。

dict.get

答案 1 :(得分:4)

你不能自己订购一个字典,但是你可以将它转换为(键,值)元组的列表,你可以对它进行排序。

使用.items()方法执行此操作。例如,

>>> {'a': 1, 'b': 2}
{'a': 1, 'b': 2}
>>> {'a': 1, 'b': 2}.items()
[('a', 1), ('b', 2)]

最有效的排序方法是使用键功能。使用cmp效率较低,因为必须为每对项目调用它,使用key只需要为每个项目调用一次。只需指定一个可调用项,它将根据项目的排序方式对项进行转换:

sorted(somedict.items(), key=lambda x: {'carrot': 2, 'banana': 1, 'apple':3}[x[0]])

上面定义了一个dict,它指定了你想要的键的自定义顺序,lambda为旧dict中的每个键返回该值。

答案 2 :(得分:1)

Python的dict是一个hashmap,所以它没有顺序。但您可以单独对键进行排序,使用keys()方法从字典中提取它们。

sorted()将比较和关键函数作为参数。

您可以使用

执行解码的精确复制
sortedKeys = sorted(dictionary, {"carrot": 2
                                ,"banana": 1
                                ,"apple":  3}.get);

答案 3 :(得分:1)

你无法对字典进行排序;字典是映射,映射没有排序。

您可以提取密钥并对其进行排序,但是:

keys = myDict.keys()
sorted_keys = sorted(keys, myCompare)

答案 4 :(得分:1)

新的Python版本中会OrderedDicthttp://www.python.org/dev/peps/pep-0372/

与此同时,您可以尝试其中一种替代方案:http://code.activestate.com/recipes/496761/Ordered Dictionary

答案 5 :(得分:0)

没有订购字典。您需要保留一个密钥列表。

您可以将自己的比较函数传递给list.sort()或sorted()。

如果你需要对多个键进行排序,只需将它们连接到一个元组中,然后对元组进行排序。