时间:2010-11-11 03:28:41

标签: c++ python

我有以下C ++代码

std::map<std::string, std::vector<std::vector<std::vector<double> > > > details
details["string"][index][index].push_back(123.5);

我可以知道什么是Pythonic声明向量矢量向量的空地图? :P

我试着

self.details = {}
self.details["string"][index][index].add(value)

我正在

KeyError: 'string'

3 个答案:

答案 0 :(得分:3)

Python是一种动态(潜在类型)语言,因此没有“矢量矢量矢量图”(或Python中的“列表列表列表”)这样的东西。 Dicts只是dicts,可以包含任何类型的值。一个空的字典就是:{}

答案 1 :(得分:3)

可能最好的方法是使用dict作为外部容器,使用字符串将键映射到内部字典,其中元组(矢量索引)映射到双精度:

 d = {'abc': {(0,0,0): 1.2, (0,0,1): 1.3}}

它可能效率较低(至少时间效率较低,实际上我想象的更节省空间)而不是实际嵌套列表,但IMHO清洁工可以访问:

>>> d['abc'][0,0,1]
1.3

修改

随时添加密钥:

d = {} #start with empty dictionary
d['abc'] = {} #insert a new string key into outer dict
d['abc'][0,3,3] = 1.3 #insert new value into inner dict
d['abc'][5,3,3] = 2.4 #insert another value into inner dict
d['def'] = {} #insert another string key into outer dict
d['def'][1,1,1] = 4.4
#...
>>> d
{'abc': {(0, 3, 3): 1.3, (5, 3, 3): 2.4}, 'def': {(1, 1, 1): 4.4}}

或者如果使用Python&gt; = 2.5,更优雅的解决方案是使用defaultdict:它就像普通字典一样工作,但可以为不存在的密钥创建值。

import collections
d = collections.defaultdict(dict)   #The first parameter is the constructor of values for keys that don't exist
d['abc'][0,3,3] = 1.3
d['abc'][5,3,3] = 2.4
d['def'][1,1,1] = 4.4
#...
>>> d
defaultdict(<type 'dict'>, {'abc': {(0, 3, 3): 1.3, (5, 3, 3): 2.4}, 'def': {(1, 1, 1): 4.4}})

答案 2 :(得分:0)

创建包含嵌套列表的dict,其中包含嵌套列表

dict1={'a':[[2,4,5],[3,2,1]]}

dict1['a'][0][1]
4