按值Python排序词典字典(3级Dict)

时间:2015-04-24 16:43:10

标签: python sorting dictionary python-2.6

我有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'并得到一个类似的词典。

2 个答案:

答案 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})]
相关问题