uksort在python中是等价的

时间:2018-01-02 13:17:43

标签: php python algorithm sorting

一直试图弄清楚如何将这个PHP代码移植到Python 3代码中,但我不能在生活中了解它的功能,更不用说移植它了。 我试图移植的代码是:

uksort($data, function ($a, $b) use ($codes) {
            $a = $codes[$a];
            $b = $codes[$b];
            if ($a < $b) {
                return -1;
            } elseif ($a > $b) {
                return 1;
            } else {
                return 0;
            }
        });

根据每个键的值对关联数组进行排序。但是,我不明白的是排序实际上是如何工作的 - 我已经用Google搜索了,我似乎无法找到返回值所指的内容。

希望有人可以帮我写一些关于编写这个PHP函数的Python端口的指示,或者至少指出我的方向。

当然我会使用收集模块的有序序列,但我不知道我是如何创建一个排序函数来模拟PHP代码中发生的事情。

编辑:澄清我需要根据另一个有序字典的值对有序字典进行排序。例如,这里需要按代码值对数据进行排序。至少我认为我是按照目前的理解做的。

1 个答案:

答案 0 :(得分:1)

我认为您希望将函数传递给key函数的sorted参数。像这样:

>>> a = ['a', 'b', 'c']
>>> codes = {'a': 3, 'b': 1, 'c':2}
>>> sorted(a, key=lambda e: codes[e])
['b', 'c', 'a']

https://docs.python.org/3/library/functions.html#sorted

修改:要按照问题中的说明对OrderedDict进行排序,您需要使用sorted返回的密钥列表来构建新密钥 - o是一个现有OrderedDict

>>> o2 = OrderedDict()
>>> for k in sorted(o, key=lambda e: codes[e]):
...     o2[k] = o[k]