使用元组值对字典进行排序并过滤前 k 个元素

Sort dictionary with tuple values and filter top k elements

我想根据元组的第二个值对字典进行排序并获取前 k 个元素。
当每个键有一个值时,下面的代码有效。如何使用元组、列表或 numpy 数组更改它?

A = {'a':(3, 4), 'b':(1, 2), 'c': (10,11)}
newA = dict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=True)[:k])

期望的输出:

'b'
'a'
'c'
newA = dict(sorted(A.iteritems(), key=lambda i: i[1][1], reverse=True)[:k])

看看这个:

In [1]: A = {'a':(3, 4), 'b':(1, 2), 'c': (10,11)}

In [2]: B = A.items()

In [3]: B.sort(key=lambda x:x[1][1])

In [4]: B
Out[4]: [('b', (1, 2)), ('a', (3, 4)), ('c', (10, 11))]

In [5]: print "\n".join([x[0] for x in B]) #expected output
b
a
c

不要忘记字典是不稳定的——它们的顺序可以而且将会改变,如果你最不期望的话会导致灾难性的错误,因为这种情况最常发生在键插入时。所以使用 collections

中的 OrderedDict
In [1]: from collections import OrderedDict
In [2]: OrderedDict(sorted(A.iteritems(), key=operator.itemgetter(1), reverse=False)[:k])
Out[2]: OrderedDict([('b', (1, 2)), ('a', (3, 4)), ('c', (10, 11))])