如何为Python现有字典添加无值(或统一值)的键列表?
给Python字典批量添加带默认值的键
假设我们有如下场景:需要给现有字典批量添加一组键,所有新键的默认值设为0:
new_keys_to_add = ['e', 'f', 'g', 'h'] my_dict = {'a':100, 'b':51, 'c':215}
你已经想到了两种实现方式:
方式一:用
update配合zip和列表推导my_dict.update(zip(new_keys_to_add, [0 for i in new_keys_to_add]))但这种方式会创建一个与
new_keys_to_add长度一致的临时列表,你希望找到无需创建新列表的更优方案。方式二:通过循环逐个添加
for i in new_keys_to_add: my_dict[i] = 0但你觉得应该有更简洁、避免显式循环的方法。
最优解决方案:使用dict.fromkeys()
Python内置的dict.fromkeys()方法专门用于生成以指定可迭代对象为键、带有统一默认值的字典,配合update方法可以完美解决你的需求:
my_dict.update(dict.fromkeys(new_keys_to_add, 0))
这个方法的优势
- 无额外临时列表:
dict.fromkeys()不会像列表推导那样生成额外的列表对象,内存利用更高效,尤其当键的数量较多时表现更明显。 - 代码简洁直观:一行代码完成批量操作,语义清晰,能直接看出是给指定键设置统一默认值并更新原字典。
- 执行效率更高:作为内置方法,
dict.fromkeys()的底层实现基于C语言,比手动循环或列表推导+zip的方式速度更快。
注意点
如果你的默认值是可变对象(比如列表[]、字典{}),dict.fromkeys()会让所有键共享同一个对象引用——修改其中一个键的值会影响所有对应键。但在你的场景中使用的是不可变的0,因此不存在这个问题。
内容的提问来源于stack exchange,提问作者saba
相关产品推荐
相关产品推荐

