我有dict
这样:
{
'INT-ABC1':
{
'acc1': {'val': -22313.7381693064, 'Qua': -241.0},
'acc2': {'val': -1312.940854148, 'Qua': -13.0}
},
'INT-ABC2':
{
'acc1': {'val': -131.2510359399, 'Qua' : -23.0},
'acc3': {'val': -131.40521409002, 'Qua' : -13.0},
'acc5': {'val': -12312.7688190937, 'Qua' : -1313.0}
}
}
我需要按照' val'并得到一个类似的词典。
答案 0 :(得分:1)
这样的东西会起作用,但我想如果你是从python开始的,你应该学习python中的排序函数。
>>> sorted(k.items(), key = lambda x: x[1][0].itervalues().next()['val'])
其中k是你的字典。
viki.omega9在他的回答中提供的链接应该是一个很好的起点。
注意:该命令将按照表单的排序顺序返回元组(或对)的列表:
[(key1, val1), (key2, val2)]
因为字典本质上是无序的。
答案 1 :(得分:0)
考虑使用已排序的函数。使用this作为参考。对于你拥有的情况,你必须使用一个键函数告诉python如何比较你的问题中的字典的两个实体。然后,排序的函数返回一个您将迭代的列表。
例如,
Animal animal = new Animal();
Animal dog = new Dog();
Animal horse = new Horse();
animal.eat(); // prints "wow!"
dog.eat(); // prints "whoa!"
horse.eat(); // prints "iiiihhh!"
对于你的情况,你需要从字典中获取项目。
编辑: 首先像其中一条评论所说,你不能直接在python中对dict进行排序。我不认为有序的词典是你需要的。您只能对已转换为列表元组的字典进行排序。例如{'a':'b','c':'d'},必须首先转换为[('a','b'),('c','d')]然后你可以选择按你的意愿排序。这里的问题是,一旦你这样做,你不能将它存储回正常的字典。原因是工作中的正常表达并不正常。您可以在python集合中使用ordereddict来“记住”insert的顺序,因此它是一个“已排序”的dict。但是,如果不做一些工作,你就不能轻易创建一个“排序”的词典。
对于你的输入,我的例子中的'b'是一个dict。所以你必须做一些工作来获得你想要的密钥。我假设你想要在每个'INT-ABC'的'acc'值之间进行排序。
>>>sorted(student_tuples, key=lambda student: student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
鉴于此,
>>> 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})]