python - 根据其他列表对字典中的列表进行排序,而无需再次分配它们

标签 python dictionary python-3.7 iterable-unpacking

我有一本大字典,我想根据一个列表对其中的列表值进行排序。对于一个简单的字典我会这样做:

d = {'a': [2, 3, 1], 'b': [103, 101, 102]}

d['a'], d['b'] = [list(i) for i in zip(*sorted(zip(d['a'], d['b'])))]

print(d)

输出:

{'a': [1, 2, 3], 'b': [102, 103, 101]}

我的实际字典有许多带有列表值的键,因此像上面那样解压缩 zip 元组变得不切实际。有没有办法在不指定所有键和值的情况下检查它们?像这样的东西:

d.values() = [list(i) for i in zip(*sorted(zip(d.values())))]

使用d.values()会导致SyntaxError:无法分配函数调用,但我正在寻找类似的东西。

最佳答案

如果您有很多个键(并且它们都具有相同长度的列表值),使用 pandas sort_values将是一种有效的排序方式:

d = {'a': [2, 3, 1], 'b': [103, 101, 102], 'c' : [4, 5, 6]}
d = pd.DataFrame(d).sort_values(by='a').to_dict('list')

输出:

{'a': [1, 2, 3], 'b': [102, 103, 101], 'c': [6, 4, 5]}

如果内存有问题,您可以就地排序,但是,由于这意味着 sort_values 返回 None,因此您无法再链接操作:

df = pd.DataFrame(d)
df.sort_values(by='a', inplace=True)
d = df.to_dict('list')

输出与上面相同。

关于python - 根据其他列表对字典中的列表进行排序,而无需再次分配它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72573286/

相关文章:

python - 如何在数据框的每一行上应用一个函数?

python - 研究音调发生器程序。 'duration' 变量(以秒为单位)不能正确确定音调播放的时间

python - 使用opencv进行人脸变形

python - 使用opencv在图像上编写表情符号

python - 如何通过cloudpickle来pickle python-attrs类函数?

python - 允许在 Python 属性中使用特殊字符的原因

c# - 将项目添加到字典会导致 NullReferenceException

python - 查找字典 Python 列表的差异

python - 安装Tensorflow时出现环境错误

python - 如何正确存储用户数据?