【问题标题】:Size of 2D dict二维字典的大小
【发布时间】:2013-05-02 08:30:08
【问题描述】:

找到二维字典大小的有效方法是什么?我目前正在使用这个 oneliner:

sum((len(v) for v in d.itervalues()))

有没有更好的办法?

【问题讨论】:

  • 这是最有效的方法,(请注意,您不需要在sum(...) 中使用额外的括号,例如sum(len(v) for v in d.itervalues())。您真的在寻找原始速度吗?
  • 不一定。我只是认为可能有一些我一无所知的字典的隐藏属性会让我的生活更轻松,并且我的代码更具可读性。
  • 只要去掉那些多余的括号就可以了方式(这也可能是主观的,即from itertools import imap sum(imap(len, d.itervalues())) 是另一种高效/快速的方式,但它不被认为更具可读性

标签: python dictionary python-2.x


【解决方案1】:

如果您假设 2D 字典是标准 python 字典,其中的值又是 python 字典,那么没有比迭代值更有效的方法了。

如果二维字典被定义为类Dict2D 的某个实例,它实现了几个特殊的命名方法,并且其值不是“正常”dicts,而是一些类似于dict 的类足够聪明地更新其父 Dict2D 的“大小”,那么您就可以这样做:

d2d = Dict2D()
# various assignments and updates ..
d2d['abc']['def'] = 1
d2d['ghi'] = {x = 4, y = 3}
d2d['abc'] = dict(klm=8, answer=42)
....
print d2d.size()

实现这样的Dict2D 是否有意义取决于您希望它的透明度以及是否需要在两次更改之间足够频繁地计算大小。

【讨论】:

  • 在这种情况下,子类化似乎有点矫枉过正。不过,它可能对“更深入”的 dicts 派上用场。
猜你喜欢
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多