Python使用map函数向字典添加输入值时字典为空,如何解决?
问题根因
- Python 3 中
map()函数返回的是惰性迭代器,只有在主动遍历该迭代器时,才会实际执行传入的映射函数。你的代码里仅创建了map对象没有遍历,dict_add函数从头到尾都没有被调用过,所以store字典始终为空。
修复方案
方案1:主动触发迭代器执行
如果要保留map写法,只需要手动触发迭代,比如将map对象转为列表:
store = {} def dict_add(n): store[n] = store.get(n,0) + 1 # 转列表会遍历整个map迭代器,触发所有dict_add执行 list(map(dict_add,input("Number: ").split())) print(store)
方案2:改用for循环实现(更推荐)
map本身设计用于无副作用的元素转换场景,用它执行修改外部变量的操作不符合常规编码习惯,直接用for循环可读性更好:
store = {} for n in input("Number: ").split(): store[n] = store.get(n, 0) + 1 print(store)
补充说明
- 对于有返回值的映射场景,
map返回的迭代器也只会在你取值时才计算对应位置的结果,不会提前计算所有元素的映射值。
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

