我有原始行:
2.48724e-008 0.00022974 0.65 1 4 0 0 0.0002 2 2 2 0
我想换新线:
6.1054382342e-10 1.26357e-05 0.65 1 4 0 0 1.1e-05 2 2 2 0
代码:
replacement = {'2.48724e-008':'6.1054382342e-10','0.00022974':'1.26357e-05','0.0002':'1.1e-05')}
for src, target in replacement.iteritems():
line = line.replace(src,target)
但结果是:
6.1054382342e-10 1.1e-052974 0.65 1 4 0 0 1.1e-05 2 2 2 0
第二个数字错了。好像python在原始行中找到了'0.0002',并将其替换为'1.1e-05',无论它是什么。
请你帮帮我吗?
答案 0 :(得分:5)
问题来自于使用dict
,密钥可以按任何顺序出现。一个可迭代的(元组或列表)就足以完成你的工作
replacement = (
('2.48724e-008','6.1054382342e-10'),
('0.00022974','1.26357e-05'),
('0.0002','1.1e-05')
)
for src, target in replacement:
line = line.replace(src,target)
答案 1 :(得分:3)
首先对键进行排序:
replacement = {'2.48724e-008':'6.1054382342e-10','0.00022974':'1.26357e-05','0.0002':'1.1e-05')}
for src, target in sorted(replacement.items(), reverse=True):
line = line.replace(src,target)
答案 2 :(得分:2)
最好在您的情况下使用list
tuple
:
>>> replacement = [('2.48724e-008','6.1054382342e-10'), ('0.00022974','1.26357e-05'), ('0.0002':'1.1e-05'})]
>>> for src, target in replacement:
... line = line.replace(src,target)
代码意外行为的原因:
python中的dict
不会按照定义的顺序存储{'key': 'value'}
对。因此,定义哪个字典的顺序以及使用dict.iteritems()
迭代它的顺序可能会发生变化。对于要维护输入元素的字典顺序的情况,请使用OrderedDict。例如(根据您的问题):
>>> import collections
>>> sequence_list = [('2.48724e-008','6.1054382342e-10'),('0.00022974','1.26357e-05'), ('0.0002':'1.1e-05'})]
>>> replacement = collections.OrderedDict()
>>> for key, value in sequence_list:
replacement[key] = value