我有一个元组列表-
[(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,可以使我获得这种行为。
答案 0 :(得分:1)
使用理解力。
这是对列表进行排序后的结果:
>>> [l[i][0] for i in range(1, len(l)) if l[i-1][1] > l[i][1]]
['c', 'g', 'h']
如果未排序,则使用自定义键用list.sort
或sorted
对其进行排序:
>>> 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']