Python如何使用map和sum对3维数组内层符合条件的字典键求和
错误原因分析
你的代码报错是因为matrizes[z]取到的二维矩阵的直接遍历对象是行列表(每个元素是存储了5个字典的列表,不是字典本身),直接对列表调用.values()方法自然会触发'list' object has no attribute 'values'的属性错误。
正确实现(仅使用sum、map)
核心实现逻辑:
- 用
sum(matrices[z], [])把二维行嵌套结构展平为一维的内层字典列表,利用sum的第二个参数作为初始空列表的特性完成列表拼接,不需要额外循环语法 - 用map把每个字典映射为对应值:如果字典的唯一值为0则返回对应键,否则返回0
- 最后用sum累加所有映射结果
soma = sum( map( lambda d: list(d.keys())[0] if list(d.values())[0] == 0 else 0, sum(matrices[z], []) ) ) print("soma = ", soma)
逻辑验证
该实现和你原有循环写法的计算逻辑完全等价:所有值为0的字典的键会被累加,值为1的字典贡献0,不会影响最终求和结果。
内容的提问来源于stack exchange,提问作者arthurmluz
相关产品推荐
相关产品推荐

