首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:多维字典

Python:多维字典
EN

Stack Overflow用户
提问于 2012-02-26 23:08:33
回答 2查看 2.3K关注 0票数 2

为了收集执行时间,我使用不同的输入参数多次运行应用程序。

入参为6:vnmbpc

从概念上讲,我可以将结果看作一个多维数组,其中任何维数都是一个不同的参数:times[A][B][C][D][E][F]将使用参数v=An=Bm=Cb=Dp=Ec=F包含模拟的执行时间。

我希望能够修复这些参数中的一些,并迭代其他参数:

代码语言:javascript
复制
for A:
  for C:
    for F:
      times[A][0][C][0][0][F]

输入参数值是稀疏的,所以我应该使用字典而不是列表。

我在考虑使用一个字典来做整个事情,每次执行的时间都是这样表示的:

代码语言:javascript
复制
times = { A:{ B:{ C:{ D:{ E:{ F:{time} } } } } } }

但是这个解决方案看起来一点也不优雅:构建整个结构并在其上迭代是一件痛苦的事情。

有没有更好的方法来处理我的数据?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-26 23:14:15

首先,如果您必须使用字典,为什么不只创建一个字典,使用元组对其进行索引?其次,使用itertools.product来避免麻烦的嵌套循环:

代码语言:javascript
复制
>>> import itertools
>>> d = {}
>>> for tup in itertools.product(range(5), repeat=2):
...     d[tup] = tup
... 
>>> d
{(1, 3): (1, 3), (3, 0): (3, 0), (2, 1): (2, 1), (0, 3): (0, 3), (4, 0): (4, 0), 
 (1, 2): (1, 2), (3, 3): (3, 3), (4, 4): (4, 4), (2, 2): (2, 2), (4, 1): (4, 1), 
 (1, 1): (1, 1), (3, 2): (3, 2), (0, 0): (0, 0), (0, 4): (0, 4), (1, 4): (1, 4), 
 (2, 3): (2, 3), (4, 2): (4, 2), (1, 0): (1, 0), (0, 1): (0, 1), (3, 1): (3, 1), 
 (2, 4): (2, 4), (2, 0): (2, 0), (4, 3): (4, 3), (3, 4): (3, 4), (0, 2): (0, 2)}

但是,可能有更好的方法来创建稀疏数组。scipy提供了sparse matrices,但我相信它们只是二维的。

以下是您可能会发现有用的其他使用模式:

代码语言:javascript
复制
>>> for tup in itertools.product(range(5), repeat=2):
...     if tup[0] == tup[1]:
...         d[tup] = tup
... 
>>> d
{(3, 3): (3, 3), (0, 0): (0, 0), (1, 1): (1, 1), (4, 4): (4, 4), (2, 2): (2, 2)}

>>> for tup in itertools.product(range(5), range(2)):
...     print d.get(tup)
... 
(0, 0)
None
None
(1, 1)
None
None
None
None
None
None

为了不那么拐弯抹角,下面是保持一个变量常量的方法:只需将一个只包含一项的序列传递给itertools.product

代码语言:javascript
复制
>>> for tup in itertools.product(range(3), [2], range(3)):
...     print tup
... 
(0, 2, 0)
(0, 2, 1)
(0, 2, 2)
(1, 2, 0)
(1, 2, 1)
(1, 2, 2)
(2, 2, 0)
(2, 2, 1)
(2, 2, 2)
票数 7
EN

Stack Overflow用户

发布于 2012-02-26 23:19:25

您可以使用元组中的参数组合作为键来创建一维字典,这会简单得多:

代码语言:javascript
复制
times[('v', 'n', 'm', 'b', 'p', 'c')] = value
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9454179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档