在玩输入验证时,特别检查提供的数据是否具有指定的所有必需属性,并丢弃我不想要的属性,我做了这样的事情:
>>> 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 是从哪里得到这些值的?