簡體   English   中英

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

[英]How can I rename a dictionary within a program?

我要求程序的用戶輸入他/她想調查的數據集的數量,例如三個數據集。 因此,我應該創建三個字典(數據集_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?

我想最后

數據集_1 = {}數據集_2 = {}

等等。

您不需要(不需要)。 保留數據集列表。

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

然后,您將獲得datasets[0]datasets[1]等,而不是datasets[1] dataset_1datasets[1] dataset_2等。

在循環內部,將init_dict設置為每個迭代頂部的全新空目錄,而不會影響先前迭代中添加到datasetsdict

如果要創建這樣的變量,可以使用全局變量

number_sets = 2
for dataset in range(number_sets):
    dict_name = ''.join(['dataset_', str(dataset+1)])
    globals() [dict_name] = {}

print(dataset_1)
print(dataset_2)

但是,這不是一個好習慣,因此,如果需要保留幾個相似的變量,則最好避免創建列表。

您可以使用單個字典,然后將所有數據集添加為字典:

all_datasets = {}

for i in range(number_sets):
    all_datasets['dataset'+str(i+1)] = {}

然后,您可以使用以下方法訪問數據:

all_datasets['dataset_1']

這個問題在許多不同的變體中被問過很多次(例如, 是最突出的問題之一)。 答案總是一樣的:

從字符串創建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]輕松訪問這些詞典。 那就是應該怎么做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM