两个列表的配对元素

2024-04-19 20:46:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在想,是否有可能在两个列表之间执行“配对”(因此一个列表的行为类似于另一个列表的答案)。你知道吗

假设列表A(从迭代中获得)是这样的:

[RESULT 1, X]
[RESULT 2, Y]
[RESULT 3, X, Y]
[RESULT 4, Z, Y]
[RESULT 5, Z]
[RESULT 6, Z, X]

列表2是:

[X, 12, 56, 2]
[Y, 100]
[Z, 22, 78, 00, 01, 5] 

我想用X,Y,Z。。。在列表1中,通过它们各自的数据(即列表2中提供的数据),最终结果如下:

[RESULT 1, [X, 12, 56, 2]]
[RESULT 3, [X, 12, 56, 2], [Y, 100]]
or
[RESULT 1, X, 12, 56, 2]
[RESULT 3, X, 12, 56, 2, Y, 100]

什么是Python的方式来实现这一点?你知道吗

非常感谢你的帮助。你知道吗


Tags: or数据答案列表方式result
3条回答

用于循环

list1=[['RESULT 1', 'X'],
       ['RESULT 2', 'Y'],
       ['RESULT 3', 'X', 'Y'],
       ['RESULT 4','Z', 'Y'],
       ['RESULT 5','Z'],
       ['RESULT 6', 'Z', 'X']]

list2=[['X', '12', '56', '2'],
       ['Y', '100'],
       ['Z', '22', '78', '00', '01', '5']]

for i in list1:
  for j in range(len(i)):
    for k in list2:
      if(i[j]==k[0]):
       i[j]=k
print(list1)

输出:

[['RESULT 1', ['X', '12', '56', '2']], 
 ['RESULT 2', ['Y', '100']], 
 ['RESULT 3', ['X', '12', '56', '2'], ['Y', '100']], 
 ['RESULT 4', ['Z', '22', '78', '00', '01', '5'], ['Y', '100']], 
 ['RESULT 5', ['Z', '22', '78', '00', '01', '5']], 
 ['RESULT 6', ['Z', '22', '78', '00', '01', '5'], ['X', '12', '56', '2']]]
list1 = [['RESULT 1', 'X'],
         ['RESULT 2', 'Y'],
         ['RESULT 3', 'X', 'Y'],
         ['RESULT 4', 'Z', 'Y'],
         ['RESULT 5', 'Z'],
         ['RESULT 6', 'Z', 'X']]

list2 = [['X', 12, 56, 2],
         ['Y', 100],
         ['Z', 22, 78, 00, 1, 5]]

map2 = {item[0]: item[1:] for item in list2}

for item in list1:
    for pos, sub_item in enumerate(item):
        item[pos] = map2.get(sub_item, sub_item)

您可以为此使用嵌套字典,并避免显式的for循环。你知道吗

lst1 = [['RESULT 1', 'X'],
        ['RESULT 2', 'Y'],
        ['RESULT 3', 'X', 'Y'],
        ['RESULT 4', 'Z', 'Y'],
        ['RESULT 5', 'Z'],
        ['RESULT 6', 'Z', 'X']]

lst2 = [['X', 12, 56, 2],
        ['Y', 100],
        ['Z', 22, 78, 0, 1, 5]]

dict_values = {k[0]: k[1:] for k in lst2}
res = {k[0]: dict(zip(k[1:], map(dict_values.get, k[1:]))) for k in lst1}

结果

{'RESULT 1': {'X': [12, 56, 2]},
 'RESULT 2': {'Y': [100]},
 'RESULT 3': {'X': [12, 56, 2], 'Y': [100]},
 'RESULT 4': {'Y': [100], 'Z': [22, 78, 0, 1, 5]},
 'RESULT 5': {'Z': [22, 78, 0, 1, 5]},
 'RESULT 6': {'X': [12, 56, 2], 'Z': [22, 78, 0, 1, 5]}}

更接近您想要的输出,您可以使用列表理解:

res2 = {k[0]: [[k[i]] + dict_values[k[i]] for i in range(1, len(k))] for k in lst1}

# {'RESULT 1': [['X', 12, 56, 2]],
#  'RESULT 2': [['Y', 100]],
#  'RESULT 3': [['X', 12, 56, 2], ['Y', 100]],
#  'RESULT 4': [['Z', 22, 78, 0, 1, 5], ['Y', 100]],
#  'RESULT 5': [['Z', 22, 78, 0, 1, 5]],
#  'RESULT 6': [['Z', 22, 78, 0, 1, 5], ['X', 12, 56, 2]]}

相关问题 更多 >