我有这样的字典:
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]
的东西,但我不知道如何返回我想要的列表。
答案 0 :(得分: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')]