У меня есть несколько словарей, которые совместно используют ключи, например,
dict1 = {'a' : 1, 'b' : 2, 'c' : -1}
dict2 = {'a' : -1, 'b' : -3, 'c' : 3}
Я хотел бы выполнить условную операцию для обоих, но изменить только значения ключей, которые удовлетворяют условию.Например, я хотел бы добавить 10 к любому ключу 'b', который имеет отрицательное значение, которое привело бы к:
dict1 = {'a' : 1, 'b' : 2, 'c' : -1}
dict2 = {'a' : -1, 'b' : 7, 'c' : 3}
Есть ли способ перебрать "ключи", которые являются общими для словаря и толькоработать на тех?например,
dicts = [dict1, dict2]
for i in dicts:
if i['b'] < 0:
i['b'] = i['b'] + 10
, но это дает интересный результат:
print dicts[0]
print dicts[1]
{'a': 1, 'c': -1, 'b': 12}
{'a': -1, 'c': 3, 'b': -3}
Что я не уверен, что понимаю.
У меня много (1000 с) парструктура такого типа, которая генерируется в цикле, поэтому я хотел бы, чтобы она была достаточно эффективной, если это возможно.
Спасибо!
edit:
Принятое решение
for key in set(dict1).intersection(set(dict2)):
for i in dicts:
if i[key] < 0:
i[key] = i[key] + 10
отлично подходит для 2 диктов.Однако, если бы у меня изначально было 'n' dicts, которые были бы все похожими, например, для 4 диктов:
dict1 = {'a' : 1, 'b' : 2, 'c' : -1}
dict2 = {'a' : -1, 'b' : -3, 'c' : 3}
dict3 = {'a' : 1, 'b': -1, 'c' : -4}
dict4 = {'a' : 0, 'b': 5, 'c' : 2}
dicts = [dict1, dict2, dict3, dict4]
И желаемый результат (только добавление 10 ко всем отрицательным 'b'
) был бы:
dict1 = {'a' : 1, 'b' : 2, 'c' : -1}
dict2 = {'a' : -1, 'b' : 7, 'c' : 3}
dict3 = {'a' : 1, 'b': 9, 'c' : -4}
dict4 = {'a' : 0, 'b': 5, 'c' : 2}
Будет ли применяться та же самая структура цикла?