如何在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。我甚至不知道你是怎么做到的。。。