如何从Python 3x中的默认字典中获取前N个元素

时间:2015-04-16 10:44:12

标签: python python-3.x defaultdict pygal

我正在寻找从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 Plotting Library

2 个答案:

答案 0 :(得分:2)

如果您实际上正在寻找defaultdict中的前20个项目,那就毫无意义; defaultdict中的项目与普通dict一样,按任意顺序排列,因此没有“第一”。

但是从你的代码中,我怀疑你可能正在寻找你从排序dict项目得到的迭代器中的前20个项目。在这种情况下,答案很简单。这些值最初来自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()):

答案 1 :(得分:1)

迭代排序字典项列表的前20个元素:

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