Я пытаюсь прочитать несколько файлов с очень похожими данными. Каждая строка этих данных имеет accessor_key и значение, ассоциированное с ней. Я пытаюсь создать словарь с ключом accessor_key в качестве словарного слова и как значение словаря - список всех значений, прочитанных до сих пор.Python: Список как ключ в словаре -
Мой код выглядит следующим образом:
with open(ind_file, "r") as r:
for line in r:
nline = line.strip()
spl = nline.split(",")
if agg_d.has_key(spl[0]):
key = spl[0]
val = spl[1]
dummy = agg_d[key]
dummy.append(val)
agg_d[key] = dummy
print key, agg_d[key]
else:
print "Something is wrong"
print agg_d
print spl[0]
print spl[1]
Как вы можете видеть, что я хочу значение, чтобы получить больше каждый раз, (увеличивается список в размере от 1 на каждой итерации) и сохраните его обратно в словарь. Однако, когда я запускаю эту программу, все ключи в словаре принимают значение списка.
Так, например, в начале программы словаря:
agg_d = {'some_key': [], 'another_key': []}
После запуска, как только она становится:
agg_d = {'some_key': ['1'], 'another_key': ['1']}
Когда это должно быть просто:
agg_d = {'some_key': ['1'], 'another_key': []}
EDIT: Я нашел работу вокруг, которую искал. Я просто сделал:
with open(ind_file, "r") as r:
for line in r:
nline = line.strip()
spl = nline.split(",")
if agg_d.has_key(spl[0]):
key = spl[0]
val = spl[1]
dummy = agg_d[key]
ad = dummy[:]
ad.append(val)
agg_d[key] = ad
print key, agg_d[key]
else:
print "Something is wrong"
print agg_d
print spl[0]
print spl[1]
Но я все равно хотел бы знать, почему это происходит вообще. Является ли «манекен» ссылкой на все значения словаря? Я запускаю это с Python 2.7.
показать, как вы создаете пустой словарь. вероятно, вы назначаете один и тот же пустой список для обоих ключей. – furas
Sidenote: 'dict.has_key' устарел и медленнее, чем простой общий метод проверки наличия ключа в' dict'; change 'if agg_d.has_key (spl [0]):' to 'if spl [0] в agg_d:', который делает то же самое быстро и более Pythonically для загрузки. – ShadowRanger