0

简单的问题,我有

  • 以 waternumbers 为键,驻留时间为值的字典 twodee
  • 当 waternumber 与第二列(line.split()[1])中的值匹配时,我想用字典的值覆盖 fileName2 的第 9 列中的值

我已经尝试了半个小时,发布似乎有点基本,但也许它会在未来帮助其他人。

twodee = dict(zip(waternumber, residencetime))


with open(fileName2, "r") as otherinput:
    try:
        for line in otherinput:
            for waternumber, residencetime in twodee.iteritems():
                line.split()[1] == waternumber
                line.split()[9] = residencetime
    except:
        pass

非常感谢!

4

2 回答 2

2

您没有将结果分配.split()给任何东西,也没有正确测试。此外,您根本不需要遍历您的 twodee dict,只需waternumber使用运算符测试该值是否存在于 dict 中in

for line in otherinput:
    line = line.split()
    waternumber = int(line[1])
    if waternumber in twodee:
        line[9] = twodee[waternumber]
    print line

最后但并非最不重要的一点是,您想对更改的行进行实际操作,我在这里打印它。

详细说明一下,其中包含的两行.split()是最终什么都不做的操作:

            line.split()[1] == waternumber
            line.split()[9] = residencetime

第一个操作将行拆分为一个列表,选择第一个元素并测试它是否等于该waternumber值。这将是Trueor False,但您不会使用布尔值做任何事情。它只是被删除,python 不对其采取行动,并且无论如何都会执行下一行。

第二个操作再次将行拆分为列表,选择第 9 个元素,并将其替换为 的值residencetime。但是, 的结果line.split()并没有神奇地改变 的值list,它返回一个列表,在这种情况下,它不会被分配给任何东西,因此会再次被删除。

于 2012-08-09T14:26:54.970 回答
2

对您的代码的一些建议:

  1. 不要在不指定或多或少的特定异常时使用 try-except(仅指定您希望发生的异常)。您在 try-except 中有错误,它们都被静默传递。
  2. 您的替换对您没有帮助,因为您没有以任何有意义的方式存储结果(您只需更改一些在每次下一次迭代中丢失的迭代变量
  3. line.split()[1] == waternumber不是赋值,而是比较,这一行被评估为表达式,结果会进一步丢失。
  4. .split() 的结果是一个全新的列表对象,其项目已更改;这个新对象进一步丢失(参见 2)。
于 2012-08-09T14:30:26.753 回答