Фильтровать несколько списков для элемента - PullRequest
0 голосов
/ 25 октября 2019

У меня есть 2 списка, содержащие значения JSON, allBuilds и rawRequirements. Каждый список имеет длину 1201 пунктов.

Содержимое allBuilds выглядит следующим образом:

{'id': 19553, 'buildTypeId': 'AlpsWeb_AlpsWebDeployWebDev'}
{'id': 24456, 'buildTypeId': 'AlpsWeb_AlpsWebDeployWebDevTomcat8', }
None
None
{'id': 19356, 'buildTypeId': 'AlpsWeb_AlpsWebDeployWebQa',}
{'id': 19357, 'buildTypeId': 'AlpsWeb_AlpsWebDeployWebQa',}
None
{'id': 19357, 'buildTypeId': 'AlpsWeb_AlpsWebDeployWebQa',}

Мне нужно отфильтровать содержимое allBuilds, чтобы удалить None, а также удалить соответствующий элемент из rawRequirements,Я пытался

successfulBuilds = list(filter(None, allBuilds)) 

Это удаляет None, но теперь длина нового списка successfulBuilds равна 972, тогда как rawRequirements все еще 1201.

Как я могу отфильтровать allBuildsдля None, а также удалите соответствующий элемент списка в rawRequirements?

---- EDIT ----

Вот пример того, что я пытаюсь сделать:

allBuilds |  rawRequirements
id        |  Requirement value1
none      |  Requirement value2 <-- 
none      |  Requirement value3 <-- 
id        |  Requirement value4
none      |  Requirement value5 <-- 
id        |  Requirement value6

Мне нужно удалить элемент в rawRequirements в том же столбце, где «all» существует в allBuilds

Ответы [ 3 ]

3 голосов
/ 25 октября 2019

Я рекомендую использовать zip:

allBuilds, rawRequirements = zip(*((ab, rR) for ab, rR in zip(allBuilds, rawRequirements) if ab is not None))

zip требует некоторого привыкания, но это очень эффективно для фильтрации или сортировки нескольких списков.

2 голосов
/ 25 октября 2019

Вы можете использовать почтовый индекс:

zipped =  zip(allBuilds,rawRequirements)
filtered_zip =  ((el1, el2) for ab, rR in zipped if el1 != None))
filtered_allBuilds, filteredRequirements = zip(*filtered_zip)
2 голосов
/ 25 октября 2019

вы можете использовать это

a=[1,2,3,None,4,5,6,7,None,10]
b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

new_a =[]
new_b =[]

for i, v in enumerate(a):
    if v is not None:
        new_a.append(v)
        new_b.append(b[i])

print(new_a,new_b,sep='\n')

выход

[1, 2, 3, 4, 5, 6, 7, 10] #a
[0, 1, 2, 4, 5, 6, 7, 9] #b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...