我正在寻找从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
答案 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]: