我有以下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'
答案 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