更多嵌套 Python 嵌套字典

发布于 2024-08-26 06:09:19 字数 329 浏览 3 评论 0原文

阅读实现嵌套的最佳方法是什么后 do: 是错误的

c = collections.defaultdict(collections.defaultdict(int))

字典? 为什么在 python 中 ?我认为这可以产生

{key:{key:1}}

,还是我想错了?

After reading What is the best way to implement nested dictionaries? why is it wrong to do:

c = collections.defaultdict(collections.defaultdict(int))

in python? I would think this would work to produce

{key:{key:1}}

or am I thinking about it wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浊酒尽余欢 2024-09-02 06:09:19

defaultdict 的构造函数需要一个可调用的。 defaultdict(int) 是默认字典对象,而不是可调用对象。但是,使用 lambda 可以工作:

c = collections.defaultdict(lambda: collections.defaultdict(int))

这是有效的,因为我传递给外部 defaultdict 的是一个可调用对象,它在调用时创建一个新的 defaultdict 。

这是一个例子:

>>> import collections
>>> c = collections.defaultdict(lambda: collections.defaultdict(int))
>>> c[5][6] += 1
>>> c[5][6]
1
>>> c[0][0]
0
>>> 

The constructor of defaultdict expects a callable. defaultdict(int) is a default dictionary object, not a callable. Using a lambda it can work, however:

c = collections.defaultdict(lambda: collections.defaultdict(int))

This works since what I pass to the outer defaultdict is a callable that creates a new defaultdict when called.

Here's an example:

>>> import collections
>>> c = collections.defaultdict(lambda: collections.defaultdict(int))
>>> c[5][6] += 1
>>> c[5][6]
1
>>> c[0][0]
0
>>> 
掐死时间 2024-09-02 06:09:19

Eli Bendersky 为这个问题提供了一个很好的直接答案。 重组数据也可能会更好。

>>> import collections
>>> c = collections.defaultdict(int)
>>> c[1, 2] = 'foo'
>>> c[5, 6] = 'bar'
>>> c
defaultdict(<type 'int'>, {(1, 2): 'foo', (5, 6): 'bar'})

根据您的实际需要

Eli Bendersky provides a great direct answer for this question. It might also be better to restructure your data to

>>> import collections
>>> c = collections.defaultdict(int)
>>> c[1, 2] = 'foo'
>>> c[5, 6] = 'bar'
>>> c
defaultdict(<type 'int'>, {(1, 2): 'foo', (5, 6): 'bar'})

depending on what you actually need.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文