python - python中的复杂排序

标签 python sorting python-3.x

我正在使用 Python 3.2,并希望根据配置文件对元组列表进行排序:

formats=CCC;aaa;BBB
providers=yy;QQ;TT

每个元组包含以下信息:

( title, size, format, provider )

我希望这组元组首先按提供者列表排序。所有 yy 都在 QQ 和 TT 之前。

然后,保持这个结果顺序,转向格式。所有 CCC 在 aaa 之前在 BBB 之前。

最后,第三个标准是按大小( float )降序排序。

至关重要的是,每个步骤都使用稳定排序,以便二次排序保持第一次排序的顺序,依此类推。

我怎样才能以 Pythonic 的方式做到这一点?谢谢。

编辑 1

这是我尝试过的方法,由于 sorted(mydata),我的方法显然不起作用。 mydata 不能是此上下文中的列表。

providers="yy;QQ;TT"
formats="CCC;aaa;BBB"

p_dict = {}
f_dict = {}

for k,v in enumerate(providers.split(';')):
    p_dict[k] = v

for k,v in enumerate(formats.split(';')):
    f_dict[k] = v

mydata = (
                ('title1', 423.4, 'QQ', 'aaa'),
                ('title2', 523.2, 'TT', 'CCC'),
                ('title3', 389.0, 'yy', 'aaa'),
                ('title4', 503.2, 'QQ', 'BBB') )

sort1 = sorted( mydata, key=p_dict.__getitem__)
print(sort1)

最佳答案

def sort_key(data):
    title, size, format, provider = data
    return p_dict[provider], f_dict[format], -size 

print sorted( mydata, key = sort_key)

基本上,设计一个关键函数来生成将按所需顺序排序的元组。

关于python - python中的复杂排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11414529/

相关文章:

python - 如何从 Python 中的字符串中提取子列表?

python - 如何在 python gtk 应用程序中使用 webkit View 提供静态文件?

javascript - 删除对象数组中的重复对象,同时保留唯一的字符串值

java - 字母数字子串排序

python - 根据其他列表从列表中选择

python - Robotframework:使用变量文件过滤标签

python 如何通过与变量名匹配的模式对列表进行排序

python-3.x - NetworkX:在 DAG 中查找最长路径,返回最大的所有关系

python - PyCharm 无法识别我的 Python 安装路径

python - numpy - 使用一些预先计算的映射有效地将值从矩阵复制到矩阵