如何在Python中创建动态命名字典?

如何在Python中创建动态命名字典?,python,pandas,dictionary,Python,Pandas,Dictionary,我希望从数据帧中分块一组数据。为此,我需要为字典定义一个动态名称 我想做一些类似的事情: dict_{}.format(VARIABLE_NAME) = {} 以上所示为非法操作。每次我需要创建一个新的词典名称时,我如何定义一个新的词典名称?这是在for循环中发生的,所以我需要使用动态dict名称。如果还有什么我需要提供的,请告诉我 下面是dataframe的一个片段 REFERENCE_CODE TRANSL

我希望从数据帧中分块一组数据。为此,我需要为字典定义一个动态名称

我想做一些类似的事情:

dict_{}.format(VARIABLE_NAME) = {}

以上所示为非法操作。每次我需要创建一个新的词典名称时,我如何定义一个新的词典名称?这是在for循环中发生的,所以我需要使用动态dict名称。如果还有什么我需要提供的,请告诉我

下面是dataframe的一个片段

   REFERENCE_CODE                                        TRANSLATION
0      ladder_now                                                NaN
1               0                                              xyzwu
2               1                                              yxzuv
3               2                                            asdfasd
4               3                                             sdfsdh
5               4                                             hghffg
6               5                                            agfdhsj
7               6                                            dfgasgf
8               7                                             jfhkgj
9               8                                           djfgjfhk
10              9                                            dsfasys
11             10                                            kghkfdy
12             98                                          dsfhsuert
13             99                                           wsdfadjs
14  country_satis  Sa pangkagab’san, aoogma po ba kamo o dai naoo...
15              1                                            Naoogma
16              2                                        Dai naoogma
17              8                           Dai aram (HUWAG BASAHIN)
18              9                           Huminabo (HUWAG BASAHIN)
19            NaN                                                NaN
我试图获取大量数据,比如,获取
ladder\u now
以及与之相关的所有值,然后找到
country\u satis
并获取这些值,将它们放在单独的字典中。这是我的逻辑。。只是缺少动态创建的dict:

for index, row in df.iterrows():
    j = 0
    if isinstance(row['REFERENCE_CODE'], str):
        if j == 0:
            # fix dynamically changing dict here
            trend_dict = {}
            trend_dict[row['REFERENCE_CODE']] = row['TRANSLATION']
        else:
            j = 0
            # create new dynamically named dictionary
            next_dict = {}
            next_dict[row['REFERENCE_CODE']] = row['TRANSLATION']
    else:
        trend_dict[row['REFERENCE_CODE']] = row['TRANSLATION']
        j += 1

因此,本质上,我希望将
dict_ladder_\u now
作为一个字典,包含它下面所有的键、值对,直到它到达
country_satis
,然后将
dict_country_satis
作为另一个字典。

而不是试图动态生成大量的变量名,相反,您应该选择不同的更高级别的数据结构来存储对象,例如字典或列表

import pandas as pd
REFERENCE_CODE = ["ladder_now", 0, 1, 5, 15, "country_satis", 20, 50, 100, "test3", 10, 50, 90]
TRANSLATION = list(range(len(REFERENCE_CODE)))
df = pd.DataFrame({"REFERENCE_CODE": REFERENCE_CODE,
                   "TRANSLATION": TRANSLATION
                   })
print(df)
#Output: Dummy data prepared for reference
   REFERENCE_CODE  TRANSLATION
0      ladder_now            0
1               0            1
2               1            2
3               5            3
4              15            4
5   country_satis            5
6              20            6
7              50            7
8             100            8
9           test3            9
10             10           10
11             50           11
12             90           12
使用列表:使用列表,以及原始问题中所写的逻辑

result = [] #container list that grows dynamically
for index, row in df.iterrows():
    j = 0
    if isinstance(row['REFERENCE_CODE'], str):
        if j == 0:
            # fix dynamically changing dict here
            result.append({}) #new dictionary in container
            result[-1][row['REFERENCE_CODE']] = row['TRANSLATION']
        else:
            j = 0
            # create new dynamically named dictionary
            result.append({}) #new dictionary in container
            result[-1][row['REFERENCE_CODE']] = row['TRANSLATION']
    else:
        result[-1][row['REFERENCE_CODE']] = row['TRANSLATION']
        j += 1
注意,按照逻辑的编写方式,您可以将其简化为以下内容。没有使用j变量,几乎每个块中都编写了相同的代码行。结果是这样的:

result = []      
for index, row in df.iterrows():
    if isinstance(row['REFERENCE_CODE'], str):
        result.append({})
    result[-1][row['REFERENCE_CODE']] = row['TRANSLATION']

print(result)
#Output:
[{'ladder_now': 0, 0: 1, 1: 2, 5: 3, 15: 4},
 {'country_satis': 5, 20: 6, 50: 7, 100: 8},
 {'test3': 9, 10: 10, 50: 11, 90: 12}]
使用dict:这里的字典容器可能更好,因为您可以按名称引用子字典

result_dict = {}
for index, row in df.iterrows():
    if isinstance(row['REFERENCE_CODE'], str):
        key = row['REFERENCE_CODE']
        result_dict[key] = {}
    result_dict[key][row['REFERENCE_CODE']] = row['TRANSLATION']
print(result_dict)
#Output:
{'ladder_now': {'ladder_now': 0, 0: 1, 1: 2, 5: 3, 15: 4},
 'country_satis': {'country_satis': 5, 20: 6, 50: 7, 100: 8},
 'test3': {'test3': 9, 10: 10, 50: 11, 90: 12}}

请注意,您可能希望进一步修改if块的逻辑,特别是因为我不确定您是否希望字符串键在子字典中重新出现。然而,这应该让您了解如何处理创建动态项数的问题。

您本质上是在问如何动态创建变量名。做这件事从来不是个好主意。您可以使用包含子词典名称的列表或词典作为关键字。@Paritossingh您能详细解释一下您的意思吗?澄清:您没有遗漏吗?@AlexYu是的,我知道。“所以我需要使用动态dict名称”不,你不需要。不要使用动态变量名。只需使用一个容器,如列表或dict.Wow。我甚至不知道你是怎么做到的。。。