3

我有以下三个整数值:

id        # identifies the pair
entropy   # gives entropy information
len       # basicly the length of a string

现在我想存储许多这些值并选择总体熵最高且长度值超过的前 10 个n

from collections import defaultdict

d = defaultdict(list)

for id, entropy, len in generateValues:
    d[id].append(entropy)
    d[id].append(len)

# now get the top 10 values

这很容易做到吗?

4

2 回答 2

5

像这样构建字典后,您可以获得前 10 个值。尽管如果可能的话,如果您在构建字典时找到它们,将会有一个更有效的解决方案。

import heapq
heapq.nlargest(10, (k for k in d if d[k][1] > n), key=lambda k: d[k][0])
于 2013-05-15T12:59:39.640 回答
1

为了解决你的问题,sorted支持一个key论点:

filtered = ((k,v) for k,v in d.iteritems() if v[1] > n) # or filter(d.iteritems(), lambda t: t[1][1] > n)
topTen = sorted(filtered, key=lambda t: t[0], reversed=true)[:10]

恕我直言,这比使用 heapq 的解决方案更具可读性(并且效率相当)。

于 2013-05-15T13:16:12.240 回答