python - Python 高效排序的字典中的并行列表
问题描述
标题几乎说明了一切,我正在寻找有效地对并行列表字典进行排序。
unsorted_my_dict = {
'key_one': [1,6,2,3],
'key_two': [4,1,9,7],
'key_three': [1,2,4,3],
...
}
sorted_my_dict = {
'key_one': [1,6,3,2],
'key_two': [4,1,7,9],
'key_three': [1,2,3,4],
...
}
我想排序key_three
,以及该字典中的所有其他列表并行。有一些类似的问题,但我很挣扎,因为我在字典中有未知数量的键要排序,而且我只知道要排序的键的名称(key_three
)。
希望使用 vanilla Python 做到这一点,没有第 3 方依赖项。
编辑1:并行是什么意思?我的意思是,如果我 sort key_three
,这需要交换最后两个值,那么字典中的所有其他列表也将交换它们的最后两个值。
编辑 2:专门为 Python 3.4
解决方案
您可以首先对enumerate
目标列表进行排序以恢复所需的索引顺序,然后按该顺序重新排列每个列表。
my_dict = {
'key_one': [1,6,2,3],
'key_two': [4,1,9,7],
'key_three': [1,2,4,3],
}
def parallel_sort(d, key):
index_order = [i for i, _ in sorted(enumerate(d[key]), key=lambda x: x[1])]
return {k: [v[i] for i in index_order] for k, v in d.items()}
print(parallel_sort(my_dict, 'key_three'))
输出
{'key_one': [1, 6, 3, 2],
'key_two': [4, 1, 7, 9],
'key_three': [1, 2, 3, 4]}
推荐阅读
- python - Python/Pygame 使 for 循环中的文本不断移动
- sql-server - 在 IF EXISTS 方法中使用存储过程而不是 select 语句
- python - 在路由之间传递对象 Flask Python
- c# - 如果在cshtml中改变样式
- c++ - SFML 绘图文本导致崩溃?
- python - Flask-sqlalchemy 通过指定列名动态更新字段
- javascript - 如何使用 forEach 在 HTML 标记中显示所有对象的值,而不是手动迭代所有值
- python - 使用 pybind11 包装 C++ 抽象类时出错
- python - 将 object 转换为 int 以执行聚合
- mysql - 在哪里放置代码以显示从 MySQL 到 Handlebars 的数据?