按最深值排序嵌套字典python 2.7,返回键元组
我有一个字典,长得像这样:
d = {11:{'a':2.1, 'b':2.2,'c':3.0},
12:{'b':4.5,'g':1.2},
4:{'g':5.6,'a':4.5,'f':0.5,'r':1.3}
}
我想要得到的是:
[(4,'g'),(4,'a'),(12,'b'),(11,'c'),(11,'b'),(11,'a'),(4,'r'),(12,'g'),(4,'f')]
所以我想做的是,把字典里的值按从大到小的顺序排列,然后得到对应的字典键,来实现这个顺序。
我想用 key = lambda x, y: d[x][y]
这样的东西,但我不知道怎么返回我想要的列表。
1 个回答
2
这样做就可以了:
sorted(((k1, k2) for k1 in d for k2 in d[k1]), key=lambda t: d[t[0]][t[1]], reverse=True)
这个生成器表达式首先列出了所有指向值的关键“路径”,然后根据这些值进行排序,排序的顺序是反向的。
示例:
>>> sorted(((k1, k2) for k1 in d for k2 in d[k1]), key=lambda t: d[t[0]][t[1]], reverse=True)
[(4, 'g'), (4, 'a'), (12, 'b'), (11, 'c'), (11, 'b'), (11, 'a'), (4, 'r'), (12, 'g'), (4, 'f')]