我正在创建一个程序,根据指定计划/报告类型的名称限定符,从2001Q1到2016Q1摄取一系列文本文件。限定符被称为键(缺少更好的名称)
keys=[' RI ','RCD','RCF','RCG','RCH','RCL','RCO','RCRII']
给定路径C:\ files,我创建了一个包含所有符合条件的文本文件的字典
files=[]
for k in keys:
for i in os.listdir(path):
if os.path.isfile(os.path.join(path,i)) and k in i:
files.append(i)
然后我创建一个字典
df_dict={file[:-4].replace(" ","_"):pd.read_table(path+file,header=[0,1],index_col=0,error_bad_lines=False,dtype={'IDRSSD':object}, low_memory=False) for file in files}
示例字典看起来像: {(Schedule_RI_2001Q1:Col1 Col2 ColN), (Schedule_RCO_2001Q1:Col1 Col2 ColN), (Schedule_RI_2005Q2:Col1 Col2 ColN) }
以键值安排。
我需要根据报告类型从主词典中创建词典。我想出了这个剧本(我知道它是业余的):
for key in keys:
for k in df_dict.keys():
for v in df_dict.values():
if key in k:
key.strip={k:v}
无论使用key.strip还是key.strip(),我都会收到错误消息,"' str'对象属性' strip'是只读的#34;或者"分别不能分配给函数调用"。有没有更好的方法来完成这项任务。我创建聚合字典的原因是做一些数据格式化等等。非常感谢帮助打破字典。
答案 0 :(得分:1)
您无法在key.strip
或key.strip()
上直接创建字典,因为它们是函数。但是,您可以创建临时字典,并将这些函数返回的值用作临时字典中的键。
这是一种相对安全的方法:
keys = ['a', 'b']
df_dict = { 'a_2010': 1, 'a_2007': 2, 'Schedule_b_2009Q1': 3 }
for key in keys:
sub_dict[key.strip()] = {}
for k, v in df_dict.items():
if key in k:
sub_dict[key.strip()][k] = v
输出:
>>> sub_dict
{'a': {'a_2007': 2, 'a_2010': 1},
'b': {'Schedule_b_2009Q1': 3}}
如果上述情况显得非常复杂,您只需使用locals()
来解决此问题(但在任何地方使用它通常都不是一个好习惯):
keys = ['a', 'b', 'c']
df_dict = { 'a_2010': 1, 'a_2007': 2, 'Schedule_b_2009Q1': 3 }
for key in keys:
locals()[key.strip()] = {}
for k, v in df_dict.items():
if key in k:
locals()[key.strip()][k] = v
输出:
>>> a
{'a_2007': 2, 'a_2010': 1}
>>> b
{'Schedule_b_2009Q1': 3}