Python 替换单独文件中的字典值

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.",

我使用的是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.",  "#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,谢谢您的输入。请看我自己的答案,我已经解决了我的问题。(也许这最终也会澄清我想问的问题。)