繁体   English   中英

如何根据特定条件将多维数组中的项附加/替换为另一个多维数组中的项

[英]How to append/replace an item from multi dimensional array by an item from another multi-dimensional array based on a specific condition

我有 2 个 3-d 数组,并试图用第二个数组的元素替换第一个最里面的元素。 我写的代码是-

my_list = [
           [['K', ['a', 'i'], '1'], ['W', ['b', 'y'], '1']], 
           [['T ', ['d', 'i', 'e', 'q', 'f', 'j'], '1'], ['P', ['d', 'r'], '1']]]

ref_list =  [['a', ['M', 'H'], 'b', ['L', 'M']], ['e', ['F'], 'd', ['M', 'N']]]
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):
                new_subl=subl[ii]
                subl[ii]=[]
                for j in b[i]:
                    subl[ii] +=[j] + new_subl
                break

我没有得到所需的输出。 我正在寻找的输出是排序的(预期输出)-

[[['K', ['M', 'i', 'H', 'i'], '1'], ['W', ['L', 'y', 'M', 'y'], '1']], [['T ', ['M', 'i', 'N', 'i', 'F', 'q', 'f', 'j'], '1'], ['P', ['M', 'r', 'N', 'r'], '1']]]

如果该元素存在于ref_list ,我想用ref_list最内层列表的元素替换my_list的最内层元素。 作为参考,我想用['M', 'i', 'H', 'i']替换['a', 'i'] ['M', 'i', 'H', 'i']因为它们后跟a in ['a', ['M', 'H']等其他元素。 此外,如果在ref_list找不到该元素,我也不想碰它。 例如 - 'f'ref_list中不存在,所以不要对它做任何事情。

您可以在collections.deque使用zip来跟踪替换my_list最里面的列表:

from collections import deque
def update(a, b):
   d = {b[i]:b[i+1] for i in range(0, len(b), 2)}
   for x, y, z in a:
      g, r = [], deque()
      for i in y[::-1]:
         if i not in d:
            r.appendleft(i)
         else:
            g = [l for k in d[i] for l in [k, *r]]+g
            r = deque()
      g = list(r)+g
      yield [x, list(g), z]

my_list = [[['K', ['a', 'i'], '1'], ['W', ['b', 'y'], '1']], [['T ', ['d', 'i', 'e', 'q', 'f', 'j'], '1'], ['P', ['d', 'r'], '1']]]
ref_list = [['a', ['M', 'H'], 'b', ['L', 'M']], ['e', ['F'], 'd', ['M', 'N']]]
result = [list(update(*i)) for i in zip(my_list , ref_list)]

输出:

[[['K', ['M', 'i', 'H', 'i'], '1'], ['W', ['L', 'y', 'M', 'y'], '1']], [['T ', ['M', 'i', 'N', 'i', 'F', 'q', 'f', 'j'], '1'], ['P', ['M', 'r', 'N', 'r'], '1']]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM