考虑使用 sorted 函数。使用this 作为参考。对于您所拥有的情况,您必须使用一个键函数来告诉 python 如何比较您在问题中拥有的字典的两个实体。然后 sorted 函数返回一个您将迭代的列表。
例如,
>>>sorted(student_tuples, key=lambda student: student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
对于您的情况,您需要从字典中获取项目。
编辑:
首先就像其中一个 cmets 所说,您不能直接在 python 中对 dict 进行排序。我不认为有序的字典是你需要的。您只能对已转换为列表元组的 dict 进行排序。例如 {'a': 'b', 'c': 'd'},必须先转换为 [('a', 'b'), ('c', 'd')] 然后你可以随意选择排序。这里的问题是,一旦执行此操作,就无法将其存储回普通字典中。原因是这不是正常的工作方式。您可以在 python 集合中使用有序字典,它“记住”插入的顺序,因此是一个“排序的”字典。但是如果不做一些工作,您将无法轻松创建“排序”的字典。
对于您的输入,我的示例中的“b”是一个字典。所以你必须做一些工作才能得到你想要的密钥。我假设您想在每个 'INT-ABC' 的 'acc' 值之间进行排序。
>>> k_dict
{'INT-ABC1': {'acc1': {'Qua': -241.0, 'val': -22313.7381693064}, 'acc2': {'Qua': -13.0, 'val': -1312.940854148}}}
>>> k_dict.items()
[('INT-ABC1', {'acc1': {'Qua': -241.0, 'val': -22313.7381693064}, 'acc2': {'Qua': -13.0, 'val': -1312.940854148}})]
>>> k_dict.items()[0][1].items()
[('acc1', {'Qua': -241.0, 'val': -22313.7381693064}), ('acc2', {'Qua': -13.0, 'val': -1312.940854148})]
>>> sorted(k_dict.items()[0][1].items(), key=lambda x: x[1]['val'])
[('acc1', {'Qua': -241.0, 'val': -22313.7381693064}), ('acc2', {'Qua': -13.0, 'val': -1312.940854148})]
鉴于此,
>>> from collections import OrderedDict
>>> t = OrderedDict()
>>> k_dict.items()[0][0]
'INT-ABC1'
>>> t[k_dict.items()[0][0]] = sorted(k_dict.items()[0][1].items(), key=lambda x: x[1]['val'])
>>> t
OrderedDict([('INT-ABC1', [('acc1', {'Qua': -241.0, 'val': -22313.7381693064}), ('acc2', {'Qua': -13.0, 'val': -1312.940854148})])])