HCSthe2nd
HCSthe2nd

Reputation: 185

Pairing elements of two lists

I’m thinking if it is possible to perform a “pairing” between two lists (so one list acts like the answer to the other).

Let’s say that LIST A (obtained from an iteration) is like this:

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

and that LIST 2 is:

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

I’d like to substitute X, Y, Z... in LIST1 by their respective data (that is available in LIST2, so the final result is something like this:

[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]

What is the pythonic way to achieve this?

Thank you very much for any help.

Upvotes: 0

Views: 81

Answers (3)

jpp
jpp

Reputation: 164623

You can use nested dictionaries for this and avoid explicit for loops.

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

{'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]}}

Closer to your desired output, you can use list comprehensions:

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]]}

Upvotes: 0

Jay Shankar Gupta
Jay Shankar Gupta

Reputation: 6088

Using For Loops

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)

Ouptput:

[['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']]]

Upvotes: 0

harshil9968
harshil9968

Reputation: 3244

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)

Upvotes: 1

Related Questions