我要求程序的用户输入他/她想调查的数据集数量,例如三个数据集。因此,我应该创建三个字典(数据集_1,数据集_2和数据集_3)来保存各种参数的值。由于我事先不知道用户想要调查的数据集的数量,因此我必须在程序中创建并命名字典。
显然,Python不允许我这样做。创建字典后,我无法重命名。
我尝试使用os.rename(“ oldname”,“ newname”),但是仅当我在计算机硬盘上存储了文件时,该方法才有效。我无法使它与仅存在于程序中的对象一起工作。
number_sets = input('Input the number of datasets to investigate:')
for dataset in range(number_sets):
init_dict = {}
# create dictionary name for the particular dataset
dict_name = ''.join(['dataset_', str(dataset+1)])
# change the dictionary´s name
# HOW CAN I CHANGE THE DICTIONARY´S NAME FROM "INIT_DICT"
# TO "DATASET_1", WHICH IS THE STRING RESULT FOR DICT_NAME?
最后我想拥有
dataset_1 = {} 数据集_2 = {}
以此类推。
答案 0 :(得分:2)
您不需要(不需要)。保留数据集列表。
datasets = []
for i in range(number_sets):
init_dict = {}
...
datasets.append(init_dict)
然后您将拥有datasets[0]
,datasets[1]
等,而不是dataset_1
,dataset_2
等
在循环内部,init_dict
被设置为每个迭代顶部的全新空目录,而不会影响在先前迭代中添加到dict
的{{1}}。 >
答案 1 :(得分:0)
如果要创建类似的变量,则可以使用全局变量
tile=geojsonvt(geoJSON,options)
data=JSON.stringify(index.getTile(z,x,y))
protobuffer = vtpbf.fromGeojsonVt({ 'geojsonLayer': tile })
buffer=Buffer.from(pako.deflate(protobuffer))
mbtiles.startWriting(function(){
return mbtiles.putTile(z,x,y, buffer,function(err){
但是,这不是一个好习惯,因此,如果需要保留几个相似的变量,最好避免创建一个列表。
答案 2 :(得分:0)
您可以使用单个字典,然后将所有数据集作为字典添加到其中:
all_datasets = {}
for i in range(number_sets):
all_datasets['dataset'+str(i+1)] = {}
然后您可以使用以下方法访问数据:
all_datasets['dataset_1']
答案 3 :(得分:0)
这个问题在许多不同的变体中被问过很多次(例如,this是最突出的问题之一)。答案总是一样的:
通过字符串创建python变量名称并非易事,而且在大多数情况下不是一个好主意。
更简单,易用,安全和可用的方法是只使用另一本词典。关于字典的很酷的事情之一:任何对象都可以成为键/值。因此,可能性几乎是无限的。在您的代码中,可以通过dict理解轻松完成此操作:
number_sets = int(input('Input the number of datasets to investigate:')) # also notice that you have to add int() here
data = {''.join(['dataset_', str(dataset + 1)]): {} for dataset in range(number_sets)}
print(data)
>>> 5
{'dataset_1': {}, 'dataset_2': {}, 'dataset_3': {}, 'dataset_4': {}, 'dataset_5': {}}
然后,可以通过data[name_of_dataset]
轻松访问这些词典。那就是应该怎么做。