Python: добавление элементов в список dict или ассоциативный массив

Я пытаюсь добавить элементы в список dict (ассоциативный массив), но каждый раз, когда он повторяется, массив перезаписывает предыдущий элемент. Так что я просто получаю массив размером 1 с последним прочитанным элементом. Я проверил, что ключи меняются каждый раз.

array=[]
for line in open(file):
  result=prog.match(line)
  array={result.group(1) : result.group(2)}

любая помощь будет отличной, спасибо =]

3 ответа

Решение

Ваше решение неверно; правильная версия:

array={}
for line in open(file):
  result=prog.match(line)
  array[result.group(1)] = result.group(2)

Проблемы с вашей версией:

  1. ассоциативные массивы - это диктанты и пустые диктанты = {}
  2. массивы - это список, пустой список = []
  3. Вы указываете массив на новый словарь каждый раз.

Это как сказать:

array={result.group(1) : result.group(2)}
array={'x':1}
array={'y':1}
array={'z':1}
....

массив остается одним элементом dict

array=[]
for line in open(file):
  result=prog.match(line)
  array.append({result.group(1) : result.group(2)})

Или же:

array={}
for line in open(file):
  result=prog.match(line)
  array[result.group(1)] = result.group(2)

Может быть, даже более Pythonic:

with open(filename, 'r') as f:
    array = dict(prog.match(line).groups() for line in f)

или, если ваш prog соответствует большему количеству групп:

with open(filename, 'r') as f:
    array = dict(prog.match(line).groups()[:2] for line in f)
Другие вопросы по тегам