在python中根据条件将项添加到列表的子列表中

在python中根据条件将项添加到列表的子列表中,python,python-2.7,Python,Python 2.7,我有如下两个列表 list1=[['a',2,3],['b',4,5],['c',6,7]] list2=[['a',5],['b',3],['c',8]] list1=['a',2,3] list3=['a',5] if list1[0]==list3[0]: list1.extend(list3[1:]) else: list1 print list1 我想根据子列表上的条件将这2个列表合并为1个列表。 如果列表1中子列表的第一个元素等于列表2中子列表的第一个元素,则列表2

我有如下两个列表

list1=[['a',2,3],['b',4,5],['c',6,7]]
list2=[['a',5],['b',3],['c',8]]
list1=['a',2,3]
list3=['a',5]

if list1[0]==list3[0]:
   list1.extend(list3[1:])
else:
   list1
print list1
我想根据子列表上的条件将这2个列表合并为1个列表。 如果列表1中子列表的第一个元素等于列表2中子列表的第一个元素,则列表2中子列表的第二个元素应添加到列表1中

结果应该是这样的

list1=[['a',2,3,5],['b',4,5,3],['c',6,7,8]]
我可以这样做,为单一的清单项目如下

list1=[['a',2,3],['b',4,5],['c',6,7]]
list2=[['a',5],['b',3],['c',8]]
list1=['a',2,3]
list3=['a',5]

if list1[0]==list3[0]:
   list1.extend(list3[1:])
else:
   list1
print list1
帮助我做同样的事情,如上面提到的子列表。我无法应用2循环


帮助我这是您的初始数据:

>>> list1=[['a',2,3],['b',4,5],['c',6,7]]
>>> list2=[['a',5],['b',3],['c',8]]
然后,我们将创建您的列表,并使用列表理解生成新列表:

>>> [ a+b[1:] for a,b in zip( list1, list2 ) if a[0] == b[0] ]
结果:

[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]
[['a', 2, 3, 5], ['b', 4, 5], ['c', 6, 7]]
[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]
仅在一行代码中:

编辑1


谢谢,但是如果列表2=[['a',5],'c',8],'b',3],它就不起作用了。帮帮我

结果:

[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]
[['a', 2, 3, 5], ['b', 4, 5], ['c', 6, 7]]
[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]
编辑2


但是列表1中的第2和第3个子列表在列表2中有值,但其排列顺序与列表1不同

拉链前的分拣

>>> zipped_sorted_list = zip( sorted(list1), sorted(list2) ) 
>>> [ a+ ( b[1:] if a[0] == b[0] else [] ) for a,b in zipped_sorted_list ]
结果


这是您的初始数据:

>>> list1=[['a',2,3],['b',4,5],['c',6,7]]
>>> list2=[['a',5],['b',3],['c',8]]
然后,我们将创建您的列表,并使用列表理解生成新列表:

>>> [ a+b[1:] for a,b in zip( list1, list2 ) if a[0] == b[0] ]
结果:

[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]
[['a', 2, 3, 5], ['b', 4, 5], ['c', 6, 7]]
[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]
仅在一行代码中:

编辑1


谢谢,但是如果列表2=[['a',5],'c',8],'b',3],它就不起作用了。帮帮我

结果:

[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]
[['a', 2, 3, 5], ['b', 4, 5], ['c', 6, 7]]
[['a', 2, 3, 5], ['b', 4, 5, 3], ['c', 6, 7, 8]]
编辑2


但是列表1中的第2和第3个子列表在列表2中有值,但其排列顺序与列表1不同

拉链前的分拣

>>> zipped_sorted_list = zip( sorted(list1), sorted(list2) ) 
>>> [ a+ ( b[1:] if a[0] == b[0] else [] ) for a,b in zipped_sorted_list ]
结果


我可以建议将主列表转换为dict:

dict1 = { e[0]:e[1:] for e in list1 }
print(dict1)
#=> {'a': [2, 3], 'c': [6, 7], 'b': [4, 5]}
然后遍历列表2,向dict添加元素:

for e in list2:
  dict1[e[0]].extend(e[1:])
#=> {'a': [2, 3], 'c': [6, 7], 'b': [4, 5]}
如果需要将其作为列表重新排序:

result = [ [k] + v for k, v in dict1.items() ]
print(result)
#=> [['a', 2, 3, 5], ['c', 6, 7, 8], ['b', 4, 5, 3]]

我可以建议将主列表转换为dict:

dict1 = { e[0]:e[1:] for e in list1 }
print(dict1)
#=> {'a': [2, 3], 'c': [6, 7], 'b': [4, 5]}
然后遍历列表2,向dict添加元素:

for e in list2:
  dict1[e[0]].extend(e[1:])
#=> {'a': [2, 3], 'c': [6, 7], 'b': [4, 5]}
如果需要将其作为列表重新排序:

result = [ [k] + v for k, v in dict1.items() ]
print(result)
#=> [['a', 2, 3, 5], ['c', 6, 7, 8], ['b', 4, 5, 3]]


谢谢,但是如果列表2=[['a',5],'c',8],'b',3],它就不起作用了。Help Me但是列表1中的第二和第三个子列表在列表2中有值,但是它没有按照列表1的顺序排列。@learningstudent,我想你应该在你的帖子上发布所需的结果示例。谢谢,但是如果列表2=[['a',5],'c',8],'b',3]],它就不起作用了。Help Me但是列表1中的第二和第三个子列表在列表2中有值,但它没有按照列表1的顺序排列。@learningstudent,我想你应该在你的帖子上发布所需的结果示例。如果列表2=[[[a',5],[c',8],[b',3]],它就不起作用了。这个答案是在低质量的帖子中给出的。添加一些解释,即使代码是自己编写的explanatory@learningstudent我已经按照每个子列表中的第一个元素添加了排序,以适应您的额外需求。如果您需要任何进一步的帮助来理解为什么要完成每一步,请告诉我。@HarshaB注意到并感谢!我将在代码中添加一些注释。如果列表2=[['a',5],'c',8],'b',3]],则它不起作用。这个答案是在低质量的帖子中给出的。添加一些解释,即使代码是自己编写的explanatory@learningstudent我已经按照每个子列表中的第一个元素添加了排序,以适应您的额外需求。如果您需要任何进一步的帮助来理解为什么要完成每一步,请告诉我。@HarshaB注意到并感谢!我将在代码中添加一些注释。帮助我,即使是像这样的列表2=[[a',5],[c',8],[b',3]]。帮助我,即使是像这样的列表2=[[a',5],[c',8],[b',3]。@iGain:谢谢。@iGain:谢谢。