2014-02-03 6 views
0

У меня такое ощущение, что если бы я знал, что искать, я бы нашел ответ. Но ....Изменение mutliple ключей ключей сразу в python

У меня есть большой 2D-массив ([83] [1000]) словарей. Каждый словарь имеет 6 ключей, которые все инициализируются False при создании массива. Затем мне нужно пройти через массив и установить различные Ключи в Истину, основываясь на том, где эта конкретная точка находится в массиве. Мне нужно установить несколько ключей в True. Я могу делать их по одному, но это просто не кажется правильным.

>>> EvenArray[0] 
{'Pierce': False, 'Include': False, 'Deboss': False, 'Button': False, 'Exclude': False, 'Emboss': False} 

Я хотел бы установить "Pierce", "Button" как True, то есть:

EvenArray[0]["Pierce","Button"]=True,True 

Но я получаю:

>>> EvenArray[0] 
{'Pierce': True, 'Include': False, 'Deboss': False, 'Button': True, ('Pierce', 'Button'): (True, True), 'Exclude': False, 'Emboss': False} 

Так что я делаю:

>>> EvenArray[0]["Button"]=True;EvenArray[0]["Pierce"]=True 
>>> EvenArray[0] 
{'Pierce': True, 'Emboss': False, 'Deboss': False, 'Button': True, 'Exclude': False, 'Include': False} 
>>> 

Я новичок в python, но это просто не выглядит pythonic ...

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

+2

Вместо словарей с булевыми значениями вы можете попробовать использовать наборы. Пустой набор будет эквивалентен словарю со всеми значениями «False», а один с несколькими элементами будет эквивалентен словарю только с теми ключами, которые имеют значения «True». Затем вы можете выполнить свои обновления с помощью метода 'update' или с помощью оператора' | = '. – Blckknght

+0

Да, как подозревали. Теперь я знаю, чтобы искать .update, и я сразу нашел то, что мне нужно. Благодарю. Я продвигаюсь вперед с Диктом. план. Но со временем я вернусь к установленному подходу. Массив содержит 86 000 элементов. Интересно будет увидеть, какой подход быстрее в конце. – Burtski

ответ

2

Если у вас есть только несколько ключей для обновления, используйте update() с аргументами ключевого слова, например:

EventArray[0].update(Button=True, Pierce=True) 

В противном случае, вы можете пройти весь словарь:

new_data = {'Button': True, 'Pierce': True, ... } 
EventArray[0].update(new_data) 
Смежные вопросы