如何在键列表中找到值小于先前值的键?

时间:2019-04-26 11:29:57

标签: python-3.x

我有一个元组列表-

[(a, 4), (b, 4), (c, 3), (d, 3), (e, 3), (h, 1), (f, 3), (g, 2)]

这是我从Counter.most_common()获得的。如何找到其值比上一个键减小的键?另外,还应该对密钥进行整理。

例如排序后应该是

[(a, 4), (b, 4), (c, 3), (d, 3), (e, 3), (f, 3), (g, 2), (h, 1)]

因此,期望是-

c, g, h 

因为它的值小于上一个键中的值。

使用键排序。 然后,循环键,值并比较前一个值。如果新值小于以前的值,则将其存储,否则继续。

我正在寻找一种更有效的解决方案,例如计数器的现成API,可以使我获得这种行为。

2 个答案:

答案 0 :(得分:1)

使用理解力。

这是对列表进行排序后的结果:

>>> [l[i][0] for i in range(1, len(l)) if l[i-1][1] > l[i][1]]
['c', 'g', 'h']

如果未排序,则使用自定义键用list.sortsorted对其进行排序:

>>> l.sort(key=lambda x: x[1], reverse=True)

答案 1 :(得分:0)

只需使用列表理解即可遍历列表并比较连续的值。

li = [('a', 4), ('b', 4), ('c', 3), ('d', 3), ('e', 3), ('h', 1), ('f', 3), ('g', 2)]
res = [ li[i+1][0] for i in range(0, len(li)-1) if li[i+1][1] < li[i][1]]
print(res)
#['c', 'h', 'g']

#If you want to sort the characters.
print(sorted(res))
#['c', 'g', 'h']