0

Я пишу скрипт для обработки данных, поэтому у меня есть список, содержащий словари с вычисленными значениями. Как только я вычислил новые, я хочу добавить соответствующий словарь с новыми записями.Python34: использование словаря для копирования значений из одного списка словарей в другой

Я знаю, что могу сделать это со списком или массивом np, но я хочу узнать, как использовать словари. Я также начал использовать понимание списка, поэтому я хочу лучше понять, как его использовать. Так что усердно заниматься жизнью.

Вот упрощенные примеры.

Я вычисляю значения и помещаю их в словарь, который затем идет в список, соответствующий каждой записи.

A=[{'low':1},{'low':2}] 
print(A) 
[{'low': 1}, {'low': 2}] # entry 0 corresponds to sample 1 and the next to sample 2 

B=[{'hi':1},{'hi':2}] 
print(B) 
[{'hi': 1}, {'hi': 2}] # entry 0 corresponds to sample 1 and the next to sample 2 

C=[{}]*len(A) # initialize list to contain a dictionary for each sample. Each dictionary will receive the corresponding values copied from A and B 
print(C) 
[{}, {}] 

Теперь я пытаюсь использовать словарь постижения

{C[x].update(A[x]) for x in range(len(A))} 
print(C) 
[{'low': 2}, {'low': 2}] 

Результаты не то, что я ожидал. Я хочу что-то вроде этого:

[{'low':1,'high':1},{'low':1,'high':1}] 

Что я не понимая здесь ...

Спасибо

+0

Это комплект понимания. –

+0

Ожидаете ли вы, что все значения равны 1, а не 1 или 2? –

+0

На основе комплекса лучше, чем сложный, я бы рекомендовал использовать циклы здесь, понимание слова редко бывает ясным. –

ответ

1

Термин C=[{}]*len(A) создает список len(A) записей, которые все имеют тот же словарь. Изменения в C[0] также изменят C[1], потому что они идентичны.

Используйте C = [ {} for _ in A ], чтобы создать новый словарь в качестве каждого элемента списка.

Но в целом, как я упоминал выше, я хотел бы добавить новые словари в существующий список; это похоже на то, что вы изначально планировали.

+0

Спасибо, созданный результат, которого я изначально ожидал. –

+0

Как работает for _ in A. Что делать? –

+0

'_' - это просто переменная (вы также можете использовать' x' или что-то еще). Использование '_' просто является условным обозначением для фиктивной переменной, которая необходима синтаксически, но которая не используется. Если вы используете обычно именованную переменную, а затем ее не используете, типичные IDE, такие как PyDev, могут дать предупреждение для неиспользуемой переменной. – Alfe

1

Вам необходимо использовать A и B вместе, чтобы обновить C. Вот одно из возможных решений.

A=[{'low':1},{'low':2}] 
B=[{'hi':1},{'hi':2}] 

C = [dict(a.items() + b.items()) for a,b in zip(A, B)]