【问题标题】:How to get first N elements from a default dictionary in Python 3x如何从 Python 3x 中的默认字典中获取前 N 个元素
【发布时间】:2015-04-16 10:44:11
【问题描述】:

我正在寻找从 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 绘图库

进行绘图

【问题讨论】:

  • defaultdict 中没有“前 N 个元素”之类的东西,因为与普通的 dict 一样,元素的顺序是任意的。
  • 另外,这里的d_2 是空的,所以它没有任何 元素。

标签: python python-3.x defaultdict pygal


【解决方案1】:

如果您实际上是在寻找defaultdict 中的前 20 个项目,那是没有意义的; defaultdict 中的项目与普通 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()):

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 2021-01-21
      • 1970-01-01
      • 2016-04-25
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多