Поиск элемента в списке списка
У меня есть список как:
list=[[lsn,tid,status,type,item,AFIM,BFIM],[1,1,Active,Read,X,-,-],[2,1,Active,Write,X,2,0],....and so on]
Теперь у меня есть одна переменная
tid=1
и я хочу найти этот список в "списке", где TID соответствует и статус должен быть "Написать". Я пытался так, но безрезультатно...
for id, stat in list/enumerate(list):
if id == tid and stat == 'Write':
print list
Помогает ли разделение списка??
2 ответа
Решение
Вы имеете в виду что-то подобное?
l = [["lsn","tid","status","type","item","AFIM","BFIM"],
[1,1,"Active","Read","X","-","-"],
[2,1,"Active","Write","X","2","0"]]
for row in l:
if row[1] == 1 and row[3] == 'Write':
print(row)
# will print ...
# [2, 1, 'Active', 'Write', 'X', '2', '0']
Вы также можете использовать namedtuples:
import collections
Row = collections.namedtuple('Row', 'lsn tid status type item AFIM BFIM')
for row in map(lambda row: Row(*row), l):
if row.tid == 1 and row.type == 'Write':
print(row)
# will print ...
# Row(lsn=2, tid=1, status='Active', type='Write', item='X', AFIM='2', BFIM='0')
Нет, расщепление не поможет.
Для этого вы можете использовать списки и динамические именованные кортежи:
from collections import namedtuple
lst = [["lsn","tid","status","type","item","AFIM","BFIM"],
[1,1,"Active","Read","X","-","-"],
[2,1,"Active","Write","X","2","0"]]
Data = namedtuple('Data', lst[0])
rows = [Data(*row) for row in lst[1:]]
print [data for data in rows if data.tid == 1 and data.type == 'Write']
# Prints [Data(lsn=2, tid=1, status='Active', type='Write', item='X', AFIM='2', BFIM='0')]
Заметки
- Как кто-то уже упоминал, лучше не называть переменные после таких встроенных функций, как
list
- это обычно приводит к путанице или ошибкам.