【问题标题】:defaultdict appending list of list rather than list?defaultdict 附加列表而不是列表?
【发布时间】:2017-11-03 20:47:18
【问题描述】:

我正在尝试在 python 3 中使用 collections.defaultdict。 我在控制台中尝试了以下步骤:

>>> from collections import defaultdict
>>> l = [1,2,3,4,5]
>>> dd = defaultdict(list)
>>> dd["one"].append(l)
>>> print(dd)
defaultdict(<class 'list'>, {'one': [[1, 2, 3, 4, 5]]})

你可以看到它添加了[[1, 2, 3, 4, 5]],即列表列表,所以我需要两个 for 循环来读取它的变量。

为什么它不附加 [1, 2, 3, 4, 5]?? 之类的东西?

我的实现或理解 defaultdict 的工作原理是否有问题? 提前谢谢你

【问题讨论】:

  • append 将您传入的对象添加到列表中,我认为您想使用extend
  • 感谢@RNar,它成功了。你能把你的评论放在答案中吗?我会赞成的

标签: python python-3.x collections defaultdict


【解决方案1】:

我的实现或理解 defaultdict 的工作原理是否有问题?

一点也不。您的代码完全按预期工作。创建了一个空列表的默认值,并且您 .append 该列表的单个元素:[1, 2, 3, 4, 5]。实际上,这与defaultdict 根本没有关系。列表包含列表是非常好的。 .append将一个列表添加到另一个列表并不是什么特殊操作。这与附加任何其他元素(例如1'hello)相同。您.appended 整个列表被认为是一个单个元素。

如果您想将迭代的 元素 添加到列表中,您应该使用 list.extend 代替:

通过附加可迭代的所有项目来扩展列表。相当于a[len(a):] = iterable

dd["one"].extend(l)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 2022-01-25
    相关资源
    最近更新 更多