Python 替换单独文件中的字典值
我使用的是python 2.7.3。我编写了一个简单的代码来搜索字典键,当它找到由Python 替换单独文件中的字典值,python,file-io,dictionary,python-2.7,Python,File Io,Dictionary,Python 2.7,我使用的是python 2.7.3。我编写了一个简单的代码来搜索字典键,当它找到由var_par定义的键时,它会迭代地从列表数组中替换新值: var_par = 'B' array = [1.4, 2.6, 4.8, 3.56] params = { "A": ["A part of", "#comment 1"], "B": [1.2, "#comment 2"], "C": ["the test run.",
var_par
定义的键时,它会迭代地从列表数组中替换新值:
var_par = 'B'
array = [1.4, 2.6, 4.8, 3.56]
params = {
"A": ["A part of", "#comment 1"],
"B": [1.2, "#comment 2"],
"C": ["the test run.", "#comment 3"]
}
for I in array:
if var_par in params: params[var_par][0] = I
execfile('script.py')
现在我想做的和我的问题是:我想把我的params
字典放在一个单独的文件parameters.dat
,然后做同样的事情,但实际改变值(在本例中为B
)对于由var_par
定义的给定键,在执行脚本script.py
之前保存文件。原因是此脚本从文件中读取其输入参数
我试着添加和玩游戏
value_old = str(params[var_par][0])
value_new = str(I)
for key in fileinput.input("parameters.dat", inplace = 1):
print key.replace(value_old, value_new),
然而,这个加法的问题是,例如,每当C
和B
共享相同的值时,它们都会被更改为新值。(这当然是逻辑,因为代码搜索的是值,而不是给定的键var_par
),否则它会工作,但代码不存在此缺陷至关重要,我目前还无法解决此问题。另一方面,我有一种感觉,那一定不是那么困难,我很接近
非常感谢您的意见
另外,我是python初学者,所以我不太擅长,但如果需要,我会尽力提供帮助
谢谢感谢那些花时间考虑我的问题的人。然而,我自己已经设法解决了这个问题。我希望下面的代码也能对其他人的编程有所帮助
execfile('parameters.dat')
var_par = 'B'
array = [1.4, 2.6, 4.8, 5.6]
for I in array: # Start choosing the values in array
if var_par in params: params[var_par][0] = I
f = open('params_temp.dat', 'w')
print >> f, 'params = {'
for p in params:
if type(params[p][0]) == str:
print >> f, ''.join(map(str,['"', p,'"',':'])), '\t',
print >> f, ''.join(map(str,['[', '"', params[p][0], '"', ','])), '\t', ''.join(map(str,['"', params[p][1], '"', ']', ',']))
else:
print >> f, ''.join(map(str,['"', p,'"',':'])), '\t',
print >> f, ''.join(map(str,['[', params[p][0], ','])), '\t', ''.join(map(str,['"', params[p][1], '"', ']', ',']))
print >> f, '}'
f.close()
os.remove('parameters.dat')
os.rename('params_temp.dat', 'parameters.dat')
execfile('script.py')
其中parameters.dat
仅包含(一些初始)字典:
params = {
"A": ["A part of", "#comment 1"],
"B": [1.2, "#comment 2"],
"C": ["the test run.", "#comment 3"]
}
然后,脚本将迭代生成文件parameters.dat
,然后调用script.py
,该文件将读取文件,终止后将选择array
中的下一个值,生成一个新的参数文件,直到array
耗尽
请注意,为了正确构建新词典,我在字符串和其他字符串之间进行了一些排序。此外,我还必须编写打印语句,这样就不会打印额外的空格。也就是说,“B”
而不是“B”
,这将不会被识别为字典键
我知道这可能被认为是“基础”,但当你开始学习一些东西时,没有什么是真正的基础此外,如果有人知道如何以一种不那么冗长的方式编程或以任何其他方式改进它,我将很高兴听到
干杯,
威廉 如果参数中的var_par:params[var_par][0]=I
,为什么不使用?这比遍历params
的所有键快得多。你好,Martijn,谢谢你的评论。我也意识到了这一点,并认为它可以写得更有效,但还没有解决它。但是编辑了我的答案。如果更改了B
和C
的其中一个列表,则它们引用的是同一个列表。您需要向我们展示如何真正构建params
。嗨,Martijn,谢谢您的输入。请看我自己的答案,我已经解决了我的问题。(也许这最终也会澄清我想问的问题。)