Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果一个子列表和另一个子列表在两个子列表中的同一索引处共享一个公共id,如何将一个子列表扩展为另一个子列表?_Python_List_Defaultdict - Fatal编程技术网

Python 如果一个子列表和另一个子列表在两个子列表中的同一索引处共享一个公共id,如何将一个子列表扩展为另一个子列表?

Python 如果一个子列表和另一个子列表在两个子列表中的同一索引处共享一个公共id,如何将一个子列表扩展为另一个子列表?,python,list,defaultdict,Python,List,Defaultdict,如果一个子列表与另一个子列表在特定索引上共享一个公共值,那么用另一个子列表扩展一个子列表的最有效方法是什么?如果列表1的索引0处的值等于列表2的索引0的值,我希望将两个子列表合并在一起 List1 = [['aaa','b','c'],['ddd','e','f']] List2 = [['aaa','1','2'],['ddd','3','4']] 期望输出: [['aaa','b','c','aaa','1','2'],['ddd','e','f','ddd','3','4']] 我的黑

如果一个子列表与另一个子列表在特定索引上共享一个公共值,那么用另一个子列表扩展一个子列表的最有效方法是什么?如果列表1的索引0处的值等于列表2的索引0的值,我希望将两个子列表合并在一起

List1 = [['aaa','b','c'],['ddd','e','f']]
List2 = [['aaa','1','2'],['ddd','3','4']]
期望输出:

[['aaa','b','c','aaa','1','2'],['ddd','e','f','ddd','3','4']]
我的黑客:

from collections import defaultdict

Keys2 = map(lambda x: x[0], List2) #returns ['aaa','ddd']
List2_of_Tuples = zip(Keys,List2) #returns [('aaa',['aaa','1','2']),('ddd',['ddd','3','4'])]

Keys1 = map(lambda x: x[0], List1) 
List1_of_Tuples = zip(Keys,List1)

Merged_List_of_Tuples = List1_of_Tuples + List2_of_Tuples
d = defaultdict(list)
for k,v in Merged_List_of_Tuples:
    d[k].append(v)

Desired_Result = map(lambda x: [item for sublist in x[1] for item in sublist],d.items())
这将返回:

[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]

我这样做是为了两个以上的大名单。有没有一种更短更有效的方法

我只会使用列表理解

List1 = [['aaa','b','c'],['ddd','e','f']]
List2 = [['aaa','1','2'],['ddd','3','4']]

new_list = [a + b for a, b in zip(List1, List2) if a[0] == b[0]]
结果:

>>> new_list
[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]

我只会使用列表理解

List1 = [['aaa','b','c'],['ddd','e','f']]
List2 = [['aaa','1','2'],['ddd','3','4']]

new_list = [a + b for a, b in zip(List1, List2) if a[0] == b[0]]
结果:

>>> new_list
[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]

我只会使用列表理解

List1 = [['aaa','b','c'],['ddd','e','f']]
List2 = [['aaa','1','2'],['ddd','3','4']]

new_list = [a + b for a, b in zip(List1, List2) if a[0] == b[0]]
结果:

>>> new_list
[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]

我只会使用列表理解

List1 = [['aaa','b','c'],['ddd','e','f']]
List2 = [['aaa','1','2'],['ddd','3','4']]

new_list = [a + b for a, b in zip(List1, List2) if a[0] == b[0]]
结果:

>>> new_list
[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]
输出

[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]
输出

[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]
输出

[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]
输出

[['aaa', 'b', 'c', 'aaa', '1', '2'], ['ddd', 'e', 'f', 'ddd', '3', '4']]

我假设
List1
List2
中不一定有匹配的项

那么:

list2_keys = map(lambda x:x[0],List2)
for i,l in enumerate(List1):
    if l[0] in list2_keys:
        List1[i].extend(List2[list2_keys.index(l[0])])
或者,如果您不想就地修改列表:

list2_keys = map(lambda x:x[0],List2)
new_list = []
for i,l in enumerate(List1):
    if l[0] in list2_keys:
        new_list.append(List1[i]+List2[list2_keys.index(l[0])])

我假设
List1
List2
中不一定有匹配的项

那么:

list2_keys = map(lambda x:x[0],List2)
for i,l in enumerate(List1):
    if l[0] in list2_keys:
        List1[i].extend(List2[list2_keys.index(l[0])])
或者,如果您不想就地修改列表:

list2_keys = map(lambda x:x[0],List2)
new_list = []
for i,l in enumerate(List1):
    if l[0] in list2_keys:
        new_list.append(List1[i]+List2[list2_keys.index(l[0])])

我假设
List1
List2
中不一定有匹配的项

那么:

list2_keys = map(lambda x:x[0],List2)
for i,l in enumerate(List1):
    if l[0] in list2_keys:
        List1[i].extend(List2[list2_keys.index(l[0])])
或者,如果您不想就地修改列表:

list2_keys = map(lambda x:x[0],List2)
new_list = []
for i,l in enumerate(List1):
    if l[0] in list2_keys:
        new_list.append(List1[i]+List2[list2_keys.index(l[0])])

我假设
List1
List2
中不一定有匹配的项

那么:

list2_keys = map(lambda x:x[0],List2)
for i,l in enumerate(List1):
    if l[0] in list2_keys:
        List1[i].extend(List2[list2_keys.index(l[0])])
或者,如果您不想就地修改列表:

list2_keys = map(lambda x:x[0],List2)
new_list = []
for i,l in enumerate(List1):
    if l[0] in list2_keys:
        new_list.append(List1[i]+List2[list2_keys.index(l[0])])

以下是另一种方法:

List1 = [['aaa','b','c'],['ddd','e','f'],['a','b'],['k','l']]
List2 = [['aaa','1','2'],['ddd','3','4'],['c','d']]
new_list = []

for (index, elem) in enumerate(List1):
    try:
        if elem[0] == List2[index][0]:
            new_list.append(elem+List2[index])
    except IndexError:
        break

print new_list

以下是另一种方法:

List1 = [['aaa','b','c'],['ddd','e','f'],['a','b'],['k','l']]
List2 = [['aaa','1','2'],['ddd','3','4'],['c','d']]
new_list = []

for (index, elem) in enumerate(List1):
    try:
        if elem[0] == List2[index][0]:
            new_list.append(elem+List2[index])
    except IndexError:
        break

print new_list

以下是另一种方法:

List1 = [['aaa','b','c'],['ddd','e','f'],['a','b'],['k','l']]
List2 = [['aaa','1','2'],['ddd','3','4'],['c','d']]
new_list = []

for (index, elem) in enumerate(List1):
    try:
        if elem[0] == List2[index][0]:
            new_list.append(elem+List2[index])
    except IndexError:
        break

print new_list

以下是另一种方法:

List1 = [['aaa','b','c'],['ddd','e','f'],['a','b'],['k','l']]
List2 = [['aaa','1','2'],['ddd','3','4'],['c','d']]
new_list = []

for (index, elem) in enumerate(List1):
    try:
        if elem[0] == List2[index][0]:
            new_list.append(elem+List2[index])
    except IndexError:
        break

print new_list


如果它们在某个特定索引部分共享一个公共值,您就错过了
。@Gerrat,已修复。谢谢。如果它们在某个特定索引中共享一个公共值,您就错过了
。@Gerrat,修复。谢谢。如果它们在某个特定索引中共享一个公共值,您就错过了
。@Gerrat,修复。谢谢。如果它们在某个特定索引中共享一个公共值,您就错过了
。@Gerrat,修复。谢谢。实际上,我不确定
map
vs列表理解的性能。您可以尝试通过
list2\u keys=[l[0]为列表2中的l生成
list2\u keys
,这可能很快。实际上,我不确定
map
与列表理解的性能。您可以尝试通过
list2\u keys=[l[0]为列表2中的l生成
list2\u keys
,这可能很快。实际上,我不确定
map
与列表理解的性能。您可以尝试通过
list2\u keys=[l[0]为列表2中的l生成
list2\u keys
,这可能很快。实际上,我不确定
map
与列表理解的性能。你可以试着通过以下途径来产生<代码>代码>列表2。你可以试着通过<代码>代码>列表2。你可以试着通过以下途径来产生<代码>列表2。你可以试试着产生<代码>代码>列表2。你可以试试试着通过以下途径来产生。如果输入的是<代码>列表1,列表2,列表2,列表2=[代码>列表2>列表2.列表2.列表2.列表2.列表2.列表2.可能会有可能是很快的.如果输入的输入是<代码>列表1,列表1,列表2.列表2.列表1,列表2.列表2.列表2.列表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2.表2]]“代码>>如果输入的是<编码>list1,list1,list2=[“aaa”“aaa',“b',“c',“c',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1'、'2']、['ddd'、'3'、'4']]
?我很喜欢这个答案,因为它使用itertools,这意味着速度和效率。不过,我遇到的一个问题是,我想在两个列表中的匹配索引不相同的地方应用它。我只能将此应用于子列表的匹配字符串位于同一位置(匹配索引上方为0)的情况,但如果列表1中的匹配索引为0(如上所述),而列表2中的匹配索引为2会怎么样?(例如,列表1、列表2=['aaa'、'b'、'c']、['ddd'、'e'、'f']]、[['1'、'2'、'aaa']、['3'、'4'、'ddd']])。这可能吗?@Chris,但这不是你最初问题的一部分:(你完全正确!你仍然解决了我的问题,但出现了一个新问题,所以我只是想知道我是否可以应用相同的方法。幸运的是,我认为我可以使用上述解决方案之一来解决这个新问题(尽管没有那么快)我已经在用你的来做最初的挑战了。非常感谢!我真的很喜欢这个答案,因为它使用itertools,这意味着速度和效率。但我遇到的一个问题是,我想在两个列表中的匹配索引不相同的地方应用它。我只能在子列表没有索引的情况下应用它匹配字符串在同一位置(匹配索引上方为0),但如果列表1中的匹配索引为0,如上所述,但列表2中的匹配索引为2?(例如,列表1、列表2=['aaa'、'b'、'c']、['ddd'、'e'、'f']]、[['1'、'2'、'aaa']、['3'、'4'、'ddd'])。这可能吗?@Chris,但这不是你最初问题的一部分:(你完全正确!你仍然解决了我的问题,但出现了一个新问题,所以我只是想知道我是否可以应用相同的方法。幸运的是,我认为我可以使用上述解决方案之一来解决这个新问题(尽管没有那么快)我已经在用你的来做最初的挑战了。非常感谢!我真的很喜欢这个答案,因为它使用itertools,这意味着速度和效率。但我遇到的一个问题是,我想在两个列表中的匹配索引不相同的地方应用它。我只能在子列表没有索引的情况下应用它匹配字符串在同一位置(匹配索引上方为0),但如果列表1中的匹配索引为0,如上所述,但列表2中的匹配索引为2?(例如,列表1、列表2=['aaa'、'b'、'c']、['ddd'、'e'、'f']]、[['1'、'2'、'aaa']、['3'、'4'、'ddd'])。这可能吗?@克里斯,但那不是你的计划