我有一本大字典,我想根据一个列表对其中的列表值进行排序。对于一个简单的字典我会这样做:
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/