Извлечение первого элемента в список из списка кортежей - PullRequest
0 голосов
/ 24 января 2020

У меня есть список извлеченных кортежей, например, элемент CRQ соответствует связанному состоянию, например, WAIT, MONITOR, DONE.

pair=[('CRQ1', 'WAIT'), ('CRQ1', 'DONE'), ('CRQ2', 'WAIT'),('CRQ2', 'MONITOR'), ('CRQ3', 'DONE'), ('CRQ4', 'MONITOR'),('CRQ5', 'DONE'),('CRQ5', 'MONITOR')]

Мое требование состоит в том, чтобы извлечь элементы CRQ в другой список, если они этого не сделали. иметь состояние «ГОТОВО».

Следовательно, список должен выглядеть следующим образом:

list=[CRQ2,CRQ4]

Ответы [ 3 ]

0 голосов
/ 24 января 2020

Есть два способа сделать это:

  1. Процедурный способ:
pair=[('CRQ1', 'WAIT'), ('CRQ1', 'DONE'), ('CRQ2', 'WAIT'),('CRQ2', 'MONITOR'), ('CRQ3', 'DONE'), ('CRQ4', 'MONITOR'),('CRQ5', 'DONE'),('CRQ5', 'MONITOR')]
arr = []

for cr, val in pair:
    if val != 'DONE':
        arr.append(cr)
Декларативный способ (с использованием списочных представлений)
pair=[('CRQ1', 'WAIT'), ('CRQ1', 'DONE'), ('CRQ2', 'WAIT'),('CRQ2', 'MONITOR'), ('CRQ3', 'DONE'), ('CRQ4', 'MONITOR'),('CRQ5', 'DONE'),('CRQ5', 'MONITOR')]
arr = [cr for cr, val in pair if val != 'DONE']
0 голосов
/ 24 января 2020

Вы можете использовать OrderedDict для объединения ваших записей по ключам ('CRQ1', 'CRQ2', et c.), И после этого вы можете получить ключи в соответствии с вашим утверждением:

from collections import OrderedDict

adict = OrderedDict()

for obj in pair:
    adict.setdefault(obj[0], []).append(obj[1])

print([obj[0] for obj in adict.items() if 'DONE' not in obj[1]])
0 голосов
/ 24 января 2020

Вы можете достичь этого, используя простое понимание списка:

list = [val [0] для val в паре, если val [1]! = 'DONE']

...