Python dictinary中的键值不会更新

时间:2018-06-01 02:02:12

标签: python list dictionary

我有一个奇怪的问题,因为我试图生成一个字典列表,将它们作为参数传递给函数。 “手动”设计输入看起来像这样:

params = [
    # Amazon
    {
            'q': "AMZN",
            'x': "NASDAQ",
    },
            {
            'q': "PIH",
            'x': "NASDAQ",
    },
    {
            'q': "AIR",
            'x': "NYSE",
    },
    {
            'q': "FCO",
            'x': "NYSEAMERICAN",
    },
    {
            'q': "7201",
            'x': "TYO",
    }
].

我尝试使用以下代码从包含代码列表(每行一个)的txt文件生成类似的词典列表:

info = {}
params = []
with open('Test_Tickers.txt') as f:
   for line in f:
       info['q'] = line.rstrip()
       info['x'] = "NYSE"
       params.append(info)
       print(info)

令人沮丧的是,print(info)返回正确的词典

{'q': 'ABB', 'x': 'NYSE'}
{'q': 'ABBV', 'x': 'NYSE'}
{'q': 'ABC', 'x': 'NYSE'}
{'q': 'ABEV', 'x': 'NYSE'}
...
{'q': 'IJS', 'x': 'NYSE'}
params看起来像这样:

[{'q': 'IJS', 'x': 'NYSE'}, {'q': 'IJS', 'x': 'NYSE'}, {'q': 'IJS', 'x':         'NYSE'}, {'q': 'IJS', 'x': 'NYSE'}, {'q': 'IJS', 'x': 'NYSE'}, {'q': 'IJS', 'x': 'NYSE'}, {'q': 'IJS', 'x': 'NYSE'}, {'q': 'IJS', 'x': 'NYSE'}, ... ]

如何更正代码,以便字典包含所有代码而不仅仅是最后一个代码?

1 个答案:

答案 0 :(得分:1)

params = []
with open('Test_Tickers.txt') as f:
   for line in f:
       info = {}
       info['q'] = line.rstrip()
       info['x'] = "NYSE"
       params.append(info)
       print(info)

我会工作

你只更新列表中的一个dict对象, 要制作多个对象,你必须在循环中定义info = {}