I am trying to append elements from a multi-dimensional list into a 2nd multi-dimensional list. Here is the code I wrote –
my_list = [[['b', ['a'], 'c'], ['d', ['a', 'b'], 'e']], 
           [['j', ['a', 'f']], ['q', 't']]]
ref_list = [[['q', 'w', 't'], ['y', 'u']], 
            [['s', 'o'], ['p', 'k', 'l']]]
newlist = []
for num, i in enumerate(my_list): 
  small_list = [] 
  for num_1, j in enumerate(i): 
    semilist = []
    for k in j:        
      if isinstance(k, list):      
        onelist = []
        for a in k:
          for ii in ref_list[num][num_1]:
            onelist.append(ii)           
        semilist.append(onelist)
      else:
        semilist.append(k)
    small_list.append(semilist)
  newlist.append(small_list)
      
print(newlist)
The output I am getting is –
[[['b', ['q', 'w', 't'], 'c'], ['d', ['y', 'u', 'y', 'u'], 'e']], [['j', ['s', 'o', 's', 'o']], ['q', 't']]]
The output I am looking for is of sort –
[[['b', ['q', 'w', 't'], 'c'], ['d', ['y', 'u'], 'e']], [['j', ['s', 'o']], ['p', 'k', 'l']]]
I want to replace elements of innermost list of “my_list” with the elements of the “ref_list”.
Advertisement
Answer
Try:
my_list = [
    [["b", ["a"], "c"], ["d", ["a", "b"], "e"]],
    [["j", ["a", "f"]], ["q", "t"]],
]
ref_list = [[["q", "w", "t"], ["y", "u"]], [["s", "o"], ["p", "k", "l"]]]
for a, b in zip(my_list, ref_list):
    for i, subl in enumerate(a):
        for ii, v in enumerate(subl):
            if isinstance(v, list):
                subl[ii] = b[i]
                break
        else:
            a[i] = b[i]
print(my_list)
Prints:
[
    [["b", ["q", "w", "t"], "c"], ["d", ["y", "u"], "e"]],
    [["j", ["s", "o"]], ["p", "k", "l"]],
]
EDIT: To append elements from 2nd list instead replacing:
my_list = [
    [["b", ["a"], "c"], ["d", ["a", "b"], "e"]],
    [["j", ["a", "f"]], ["q", "t"]],
]
ref_list = [[["q", "w", "t"], ["y", "u"]], [["s", "o"], ["p", "k", "l"]]]
for a, b in zip(my_list, ref_list):
    for i, subl in enumerate(a):
        for ii, v in enumerate(subl):
            if isinstance(v, list):
                subl[ii].extend(b[i])
                break
        else:
            a[i].extend(b[i])
print(my_list)
Prints:
[
    [["b", ["a", "q", "w", "t"], "c"], ["d", ["a", "b", "y", "u"], "e"]],
    [["j", ["a", "f", "s", "o"]], ["q", "t", "p", "k", "l"]],
]
EDIT2: To add elements of 2nd list at the beginning of first list:
my_list = [
    [["b", ["a"], "c"], ["d", ["a", "b"], "e"]],
    [["j", ["a", "f"]], ["q", "t"]],
]
ref_list = [[["q", "w", "t"], ["y", "u"]], [["s", "o"], ["p", "k", "l"]]]
for a, b in zip(my_list, ref_list):
    for i, subl in enumerate(a):
        for ii, v in enumerate(subl):
            if isinstance(v, list):
                subl[ii] = b[i] + subl[ii]
                break
        else:
            a[i] = b[i] + a[i]
print(my_list)
Prints:
[
    [["b", ["q", "w", "t", "a"], "c"], ["d", ["y", "u", "a", "b"], "e"]],
    [["j", ["s", "o", "a", "f"]], ["p", "k", "l", "q", "t"]],
]