Python 组合两个多维阵列
在Python中有这两个数组:Python 组合两个多维阵列,python,arrays,multidimensional-array,Python,Arrays,Multidimensional Array,在Python中有这两个数组: a = [ ['a',1], ['b',2], ['c',3] ] b = [ ['a',10], ['b',20], ['c',30], ['d',40] ] 是否可以将它们组合成这样的单个阵列 output = [ ['a',1,10], ['b',2,20], ['b',3,30], ['c',0,40] ] 由于第一个数组中不存在“c”,因此第一个整数应为0 谢谢。如评论中所述,如果任何地方都可能出现缺失值,则不能使用zip或zip\u。在这里,我使用
a = [ ['a',1], ['b',2], ['c',3] ]
b = [ ['a',10], ['b',20], ['c',30], ['d',40] ]
是否可以将它们组合成这样的单个阵列
output = [ ['a',1,10], ['b',2,20], ['b',3,30], ['c',0,40] ]
由于第一个数组中不存在“c”,因此第一个整数应为0
谢谢。如评论中所述,如果任何地方都可能出现缺失值,则不能使用
zip
或zip\u
。在这里,我使用DICT连接值:
a = [ ['a',1], ['b',2], ['c',3] ]
b = [ ['a',10], ['b',20], ['c',30], ['d',40] ]
d1, d2 = dict(a), dict(b)
d = {k: [d1.get(k, 0), d2.get(k, 0)] for k in d1.keys() | d2.keys()}
print( sorted([k, *v] for k, v in d.items()) ) # use custom key= to sort them to right order (or don't use sort if you don't need it)
印刷品:
[['a', 1, 10], ['b', 2, 20], ['c', 3, 30], ['d', 0, 40]]
在我看来,为数据类型选择字典比列表更有意义,但如果需要使用列表,这是一种方法:
- 原始列表中的列表实际上只是元组,将键与值匹配;字典在这里更有意义
- 对于原始列表中的每个键,您希望在结果中有一个列表
- 结果列表中的列表实际上只是3元组,将键与第一个和第二个值匹配
- 您希望每个键的第一个列表中的值(如果没有,则为0)作为第一个值
- 您希望每个键的第一个列表中的值(如果没有,则为0)作为第二个值
sorted()
用于保持顺序。如果不能保证按字母顺序排列,您可以使用如下方式组合键和重复数据消除:
def dedupe(seq):
seen = set()
seen_add = seen.add
return [x for x in seq if not (x in seen or seen_add(x))]
是否只缺少最后的值?例如,不是从列表的开头或中间开始?@AndrejKesely是的,它可以是从任何地方开始的。@AndrejKesely您删除的答案是正确的。谢谢@菲利佩亚巴波利多不,不是。缺少
['b',2,20]
值…@AndrejKesely这很奇怪,可能遗漏了它,让我在这里再次检查我的原始数组。
def dedupe(seq):
seen = set()
seen_add = seen.add
return [x for x in seq if not (x in seen or seen_add(x))]