<p>看起来你真正需要的是字典,而不是数组。如果你用字典,这个问题就简单多了。转换为dicts非常简单:</p>
<pre><code>dictOne = dict(arrayOne)
dictTwo = dict(arrayTwo)
</code></pre>
<p>从那里,你可以把它们组合成这样:</p>
^{pr2}$
<p>它的作用是创建一个名为<code>combined</code>的新字典,我们将把最后的数据放入其中。然后,我们从两个原始字典中生成一组键。使用一套设备确保我们不会重复任何事情。最后,我们循环使用这组键并将每对值添加到<code>combined</code>字典中,告诉调用<code>.get</code>方法以在不存在值的情况下提供<code>0</code>。如果需要将组合字典切换回数组,这也非常简单:</p>
<pre><code>arrayResult = []
for name in combined:
arrayResult.append([ name ] + combined[name])
</code></pre>
<p>假设要将另一列添加到结果字典中,只需将中间代码改为如下所示:</p>
<pre><code>combined = dict()
for name in set(dictOne.keys() + dictTwo.keys() + dictThree.keys()):
combined[name] = [ dictOne.get(name, 0), dictTwo.get(name, 0), dictThree.get(name, 0) ]
</code></pre>
<p>如果您想将所有这些逻辑封装在一个函数中(我建议您这样做),可以这样做:</p>
<pre><code>def combine(*args):
# Create a list of dictionaries from the arrays we passed in, since we are
# going to use dictionaries to solve the problem.
dicts = [ dict(a) for a in args ]
# Create a list of names by looping through all dictionaries, and through all
# the names in each dictionary, adding to a master list of names
names = []
for d in dicts:
for name in d.keys():
names.append(name)
# Remove duplicates in our list of names by making it a set
names = set(names)
# Create a result dict to store results in
result = dict()
# Loop through all the names, and add a row for each name, pulling data from
# each dict we created in the beginning
for name in names:
result[name] = [ d.get(name, 0) for d in dicts ]
# Return, secure in the knowledge of a job well done. :-)
return result
# Use the function:
resultDict = combine(arrayOne, arrayTwo, arrayThree)
</code></pre>