Python重构-更改循环中的变量类型和值

tjrkku2a  于 2023-02-21  发布在  Python
关注(0)|答案(3)|浏览(173)

我正在自动化一些word和PDF文档,这些文档需要按照一定的节奏进行更新,我做这件事的方法是使用字典来替换word文档中的变量。
我的代码工作,但因为我的领域是不懂技术,我使用excel文件,以便人们可以取代该文件中的值时,他们需要更新的文件。
我也成功地从excel中提取了字典的键和值,但是我试图重构这段代码,这段代码是重复的。下面是我正在创建的7个字典中的2个的摘录:

dic = pd.read_excel('test.xlsx',"AD")
AD = dict(zip(dic.Key,dic.Value))

dic = pd.read_excel('test.xlsx',"RSM")
RSM = dict(zip(dic.Key,dic.Value))

我试着重构它,这样我就可以在一个循环中运行它,并尝试如下:

import pandas as pd
AD = "AD"
RSM = "RSM"

groups = [AD, RSM]

for item in groups:
    dic = pd.read_excel('test.xlsx',item)
    item = dict(zip(dic.Key,dic.Value))

因此,我基本上首先将变量作为字符串使用,以在read_excel方法中调用excel选项卡,然后我希望替换同一个变量,使其成为输出字典。
当我在循环中打印item的时候,我得到了正确的字典,但是我不能输出一个变量来存储循环创建的字典。
任何帮助都将不胜感激。
谢谢!

xxhby3vn

xxhby3vn1#

你就快到了,你可以有一本字典中的字典:

import pandas as pd

groups = ['AD', 'RSM']

dicts = {}
for item in groups:
    dic = pd.read_excel('test.xlsx', item)
    dicts[item] = dict(zip(dic.Key, dic.Value))

现在,您只需按如下方式访问它们:

print(dicts['AD']['some key'])

字典的值可以是任何东西,包括其他字典;字典的键也可以是很多东西,只要它们是可散列的,字符串当然是一个常见的选择--你的组名也是如此。
还要注意的是,我删除了名为ADRSM的变量。如果变量是以字符串值命名的,实际上并没有什么效果。它只是为了能够省略使用值的引号,但它创建了一个额外的间接寻址,没有任何作用。
如果您甚至不需要组列表,而只希望groups成为实际的字典:

import pandas as pd

groups = {}
for item in ['AD', 'RSM']:
    dic = pd.read_excel('test.xlsx', item)
    groups[item] = dict(zip(dic.Key, dic.Value))
rvpgvaaj

rvpgvaaj2#

问题是您将结果赋给了item变量,而不是列表中的条目。
一个简单的解决方法是使用字典而不是列表来保存结果

import pandas as pd
AD = "AD"
RSM = "RSM"

groups = {AD: None, RSM: None}

for item in groups.keys():
    dic = pd.read_excel('test.xlsx',item)
    groups[item] = dict(zip(dic.Key,dic.Value))
qncylg1j

qncylg1j3#

我的建议是使用一个完整的字典来跟踪你的工作,并将结果保存在那里。我将你的代码稍微重构为:

import pandas as pd

groups = dict.fromkeys(('AD', 'RSM'))  # setup main dict containing dicts

for item in groups:
    dic = pd.read_excel('test.xlsx', item)
    groups[item] = dict(zip(dic.Key, dic.Value))  # store individual dict

因为只使用一次的全局常量是不需要的,所以我删除了它们。我还添加了一些空格,以帮助Python代码符合全球标准样式指南PEP-8。现在,您可以根据需要访问每个字典,例如groups['AD']

相关问题