如何在程序中重命名词典?

时间:2019-03-25 15:14:16

标签: python dictionary

我要求程序的用户输入他/她想调查的数据集数量,例如三个数据集。因此,我应该创建三个字典(数据集_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 = {}

以此类推。

4 个答案:

答案 0 :(得分:2)

您不需要(不需要)。保留数据集列表。

datasets = []
for i in range(number_sets):
    init_dict = {}
    ...
    datasets.append(init_dict)

然后您将拥有datasets[0]datasets[1]等,而不是dataset_1dataset_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]轻松访问这些词典。那就是应该怎么做。