Python:如何对3d数组中的值求和,其中最后一个数组是使用函数映射和求和的字典




(这是代码降临节第4天,我已经有了我的星星,但我想更高效地完成它(
我有一个像这样的3d矩阵:

[
[
[{22: 0}, {13: 0}, {17: 1}, {11: 1}, {0 : 1}],
[{8 : 0}, {2 : 1}, {23: 1}, {4 : 1}, {24: 1}],
[{21: 1}, {9 : 1}, {14: 1}, {16: 0}, {7 : 1}],
[{6 : 0}, {10: 0}, {3 : 0}, {18: 0}, {5 : 1}],
[{1 : 0}, {12: 0}, {20: 0}, {15: 0}, {19: 0}]
],
[
[{3 : 0}, {15: 0}, {0 : 1}, {2 : 1}, {22: 0}],
[{9 : 1}, {18: 0}, {13: 0}, {17: 1}, {5 : 1}],
[{19: 0}, {8 : 0}, {7 : 1}, {25: 0}, {23: 1}],
[{20: 0}, {11: 1}, {10: 0}, {24: 1}, {4 : 1}],
[{14: 1}, {21: 1}, {16: 0}, {12: 0}, {6 : 0}]
], 

[
[{14: 1}, {21: 1}, {17: 1}, {24: 1}, {4 : 1}],
[{10: 0}, {16: 0}, {15: 0}, {9 : 1}, {19: 0}],
[{18: 0}, {8 : 0}, {23: 1}, {26: 0}, {20: 0}], 
[{22: 0}, {11: 1}, {13: 0}, {6 : 0}, {5 : 1}], 
[{2 : 1}, {0 : 1}, {12: 0}, {3 : 0}, {7 : 1}]
]
]

我想用映射/求和函数求和其中一个矩阵的所有值。这就是我现在拥有的并且有效的:

# z is one of those matrices, 0, 1 or 2
soma = 0
for line in matrices[z]:  # line is a list of dictionaries
for dic in line:      # dic is a dictionary from the list
valor = list(dic.values())[0]
if valor == 0:
soma += list(dic.keys())[0]

我尝试过的:

print("soma = ", sum(map(sum, ( (value.values())[0] for value in matrizes[z]))))

这不起作用,我得到这个错误:追踪(最近一次通话(:

文件"第4.py"天;,线75,在<模块>
print("part1=",sum(map(sum,(value.values(([0]表示矩阵[z]中的值((
File";第4.py"天;,线75,在<genexpr>
print("part 1="sum(map(sum,((value.values((([0]表示矩阵[z]中的值((
AttributeError:"list"对象没有属性"values">

我发现了一篇关于2d数组的文章,但不知道如何制作3d数组
我还发现了使用";numpy";,但我想处理映射和求和函数。

你可以做:

z = 0
soma = sum(map(lambda line: sum(k for d in line for k, v in d.items() if v == 0), matrices[z]))
print(soma) # 163

你可以这样做一行:

m = [
[
[{22: 0}, {13: 0}, {17: 1}, {11: 1}, {0 : 1}],
[{8 : 0}, {2 : 1}, {23: 1}, {4 : 1}, {24: 1}],
[{21: 1}, {9 : 1}, {14: 1}, {16: 0}, {7 : 1}],
[{6 : 0}, {10: 0}, {3 : 0}, {18: 0}, {5 : 1}],
[{1 : 0}, {12: 0}, {20: 0}, {15: 0}, {19: 0}]
],
[
[{3 : 0}, {15: 0}, {0 : 1}, {2 : 1}, {22: 0}],
[{9 : 1}, {18: 0}, {13: 0}, {17: 1}, {5 : 1}],
[{19: 0}, {8 : 0}, {7 : 1}, {25: 0}, {23: 1}],
[{20: 0}, {11: 1}, {10: 0}, {24: 1}, {4 : 1}],
[{14: 1}, {21: 1}, {16: 0}, {12: 0}, {6 : 0}]
], 

[
[{14: 1}, {21: 1}, {17: 1}, {24: 1}, {4 : 1}],
[{10: 0}, {16: 0}, {15: 0}, {9 : 1}, {19: 0}],
[{18: 0}, {8 : 0}, {23: 1}, {26: 0}, {20: 0}], 
[{22: 0}, {11: 1}, {13: 0}, {6 : 0}, {5 : 1}], 
[{2 : 1}, {0 : 1}, {12: 0}, {3 : 0}, {7 : 1}]
]
]
s = sum([k for y in m for x in y for z in x for k,v in z.items() if v == 0])
print(s)

最新更新