在Python 2中,我可以进行以下操作:
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> map(d.update, extras)
>> d['c']
>> 4
在Python 3中,如果获取一个不存在的键,则会引发一个 KeyError
错误:
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> map(d.update, extras)
>> d['c']
>> KeyError: 'c'
我希望在Python 3中实现与Python 2相同的行为。
我理解在Python 3中,map
函数将返回一个迭代器(延迟评估等),必须对其进行迭代才能更新字典。
我曾假设d['c']
键查找会以某种方式触发map
迭代,但事实并非如此。
有没有一种Python风格的方法可以在不编写for循环的情况下实现这种行为,我觉得与map
相比,for循环过于冗长。
我考虑过使用列表推导:
>> d = {'a':1}
>> extras = [{'b':2}, {'c':4}]
>> [x for x in map(d.update, extras)]
>> d['c']
>> 4
但它似乎不符合Python的风格。
list(map(d.update, extras))
会强制迭代器被消耗。 - jonrsharpe