Во время игры с проверкой входных данных, в частности, проверяя, имеют ли предоставленные данные все необходимые атрибуты и отбрасывают атрибуты, которые мне не нужны, я сделал что-то вроде этого:Понимание словаря Python для копирования некоторых пар в новый словарь
>>> input = {'v1': 'val1', 'a2':'val2', 'a3':'val3'}
>>> print input
{'v1': 'val1', 'a3': 'val3', 'a2': 'val2'}
>>> goodkeys = ['a2', 'a3']
>>> print goodkeys
['a2', 'a3']
>>> output = {}
>>> for a in goodkeys:
... output[a] = input[a]
...
>>>
>>> print output
{'a3': 'val3', 'a2': 'val2'}
Это, конечно, работает. Но мне пришло в голову, что это возможно сделать более питоническим способом. Я пробовал:
>>> output = {}
>>> print output
{}
>>> output = { a:v for a in goodkeys for v in input[a] }
>>> print output
{'a3': '3', 'a2': '2'}
>>>
Который на полсекунды считал сработавшим, тогда я понял, что значения ошибочны. Есть ли хороший метод Python? И что случилось, где Python получил эти ценности?
Если 'input' не содержит один из хороших ключей, скажем,' a2' - что вы хотите, чтобы произошло? – georg
Пожалуйста, не используйте 'input' в качестве имени переменной; это ключевое слово в python 3. – palsch