如何在python3x中从默认字典中获取前N个元素

如何在python3x中从默认字典中获取前N个元素,python,python-3.x,defaultdict,pygal,Python,Python 3.x,Defaultdict,Pygal,我正在寻找从DefaultDict中获取第一个N元素的pythonic方法。我在几个论坛上搜索过它。找不到任何有用的解决方案。我尝试了以下操作,但这并没有按预期停止执行 代码: d_2=defaultdict(列表) i=-1 对于排序后的x,y(d_2.items(),reverse=True): i=i+1 如果我如果你真的在defaultdict中查找前20项,那就没有意义了;defaultdict中的项目与普通的dict一样,顺序任意,因此没有“第一” 但是从您的代码中,我怀疑您可能正在

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

代码:

d_2=defaultdict(列表)
i=-1
对于排序后的x,y(d_2.items(),reverse=True):
i=i+1

如果我如果你真的在
defaultdict
中查找前20项,那就没有意义了;
defaultdict
中的项目与普通的
dict
一样,顺序任意,因此没有“第一”

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

也就是说,首先建立一个前20名的列表,而不是建立一个排序的列表,然后选择前20名,可能会更清楚(也会更节省空间):

for x, y in heapq.nsmallest(20, d_2.items()):

如果您实际上是在查找
defaultdict
中的前20项,那么这是毫无意义的;
defaultdict
中的项目与普通的
dict
一样,顺序任意,因此没有“第一”

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

也就是说,首先建立一个前20名的列表,而不是建立一个排序的列表,然后选择前20名,可能会更清楚(也会更节省空间):

for x, y in heapq.nsmallest(20, d_2.items()):

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

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

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

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

defaultdict
中没有“前N个元素”这样的东西,因为与普通
dict
一样,元素的顺序是任意的。此外,这里的
du 2
是空的,因此它没有任何元素。
defaultdict
中没有“前N个元素”这样的东西,因为与普通
dict
一样,元素的顺序是任意的。而且,这里的
d_2
是空的,因此它没有任何元素。