按最深值排序嵌套字典python 2.7,返回键元组

1 投票
1 回答
814 浏览
提问于 2025-04-17 20:13

我有一个字典,长得像这样:

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')]

撰写回答