0

我正在寻找从 DefaultDict 获取第一个 N 元素的 Pythonic 方式。我在几个论坛上搜索过。找不到任何有用的解决方案。我尝试了以下操作,但这并没有按预期停止执行。

代码:

d_2 = defaultdict(list)
i = -1

for x,y in sorted(d_2.items(), reverse = True):
            i = i + 1
            if i <= 20:
                print ("%d, %s" %(i,x))
                most_used_val_bar.add(str(x),y)
            else:
                break
most_used_val_bar.render_to_file(directory + "/most_used_values.svg")

但是当我超过 20 岁时,这段代码不会中断,我正在使用这个 for 循环使用Pygal 绘图库进行绘图

4

2 回答 2

3

如果您实际上是在寻找 a 中的前 20 个项目defaultdict,那是没有意义的;a 中的项目defaultdict与 normal 一样dict,是任意顺序的,因此没有“第一”。

但是从您的代码中,我怀疑您可能正在寻找迭代器中的前 20 个项目,这些项目是通过对字典的项目进行排序而获得的。在这种情况下,答案很简单。值最初来自 a 并不重要defaultdict。你有一个可迭代的,你想把它分成前 20 个项目,你调用islice

for x, y in itertools.islice(sorted(d_2.items(), reverse=True), 20):

话虽如此,首先构建前 20 名的列表可能更清晰(并且会更节省空间),而不是先构建排序列表然后获取前 20 名:

for x, y in heapq.nsmallest(20, d_2.items()):
于 2015-04-16T10:53:34.567 回答
1

遍历排序字典项目列表的前 20 个元素的一部分:

for x,y in sorted(d_2.items(), reverse = True)[:20]:
于 2015-04-16T11:07:22.200 回答