向字典添加键和值

时间:2015-06-09 09:56:26

标签: python python-2.7 dictionary iteration

我正在尝试向(空)字典添加新的键/值对。我有一个带有字符串的文本文件(年),脚本应该计算年份的外观。

    with open ("results/results_%s.txt" % bla, "r") as myfile:
       for line in myfile:
        line = line.translate(None, ''.join(chars_to_remove))
        abc = line.split("_", 2)
        year = abc[1:2]
        year = ''.join(year)
        year = year.translate(None, ''.join(chars_to_remove))
        raey = {}
        #increment the value of the "year"-key, if not present set it to 0 to avoid key erros
        raey[year] = raey.get(year, 0) + 1

但是,如果这返回例如{'2004':1},但它应该构建一个字典(如{1993:2,2012:3}),如果我在for循环中插入“print”语句我得到了例子:

{'1985': 1}
{'2062': 1}
{'1993': 1}
{'2000': 1}
{'2007': 1}
{'2009': 1}
{'1993': 1}
{'1998': 1}
{'1993': 1}
{'1998': 1}
{'2000': 1}
{'2013': 1}
{'1935': 1}
{'1999': 1}
{'1998': 1}
{'1992': 1}
{'1999': 1}
{'1818': 1}
{'2059': 1}
{'1990': 1}

它没有构建正确的dict,代码正在用每个循环替换dict。我做错了什么?

2 个答案:

答案 0 :(得分:4)

问题是你是在for循环中初始化dict,所以每次都会创建一个新的。相反,将其移出

with open ("results/results_%s.txt" % bla, "r") as myfile:
  raey = {}
  for line in myfile:
    line = line.translate(None, ''.join(chars_to_remove))
    abc = line.split("_", 2)
    year = abc[1:2]
    year = ''.join(year)
    year = year.translate(None, ''.join(chars_to_remove))
    #increment the value of the "year"-key, if not present set it to 0 to avoid key erros
    raey[year] = raey.get(year, 0) + 1

答案 1 :(得分:2)

您调用raey = {}的每次迭代都会清除字典。将该行移动到循环之前以初始化字典一次并将其填入循环中。