Поиск по списку словарей с использованием условия для извлечения определенных элементов - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть огромная таблица, в которой я пытаюсь найти какие-то конкретные данные.

С одной стороны, у меня есть такие идентификаторы:

Y00988-11    
G01024-14    
Z01933-13

А с другой стороныУ меня есть массивная электронная таблица (CSV) в следующем формате:

Run,Sample,Source,Rate,
DFT,G01024-14,A,High
DFT,U04424-15,B,Low
TFF,T64673-18,A,Low
RRT,I01324-14,A,High
RRT,J01624-14,A,High
...

Я пытаюсь извлечь как 'Sample' ID, так и 'Run' идентификаторов, представляющих интерес.

Я прочитал электронную таблицу csv в словарь, используя встроенный считыватель, но у меня просто возникают проблемы с извлечением интересующих меня элементов.

import csv
import sys

# IDs of interest
dataset=sys.argv[1]

# CSV spreadsheet
database=sys.argv[2]

sampleIDs=[]
with open(dataset, 'r') as file:
    for line in file:
        line.strip('\n')
        sampleIDs.append(line)
file.close()

seq_Dict=[]
finalList=['init']


with open(database, 'rb') as csvfile:
    reader=csv.DictReader(csvfile, delimiter=',')
    for line in reader:
        seq_Dict.append(line)
csvfile.close()


for element in seq_Dict:
    for key, value in element.items():
        if element['Sample'] in sampleIDs:
            finalList.pop()
            finalList.append(element['Sample']+" "+element['Run'])

for i in finalList:
    print(i)

Этот скрипт возвращает информацию о последнемИдентификатор в моих sampleID, так что я вижу, что то, что происходит во время цикла, перезаписывает предыдущую итерацию.Поэтому я использовал deepcopy, но это не сработало.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

попробуйте это:

for element in seq_Dict:
   sample = element['Sample']
   if sample in sampleIDs:
       finalList.append(sample +" "+element['Run'])
0 голосов
/ 28 сентября 2018

С новой информацией, которую вы предоставили мне, вот почему вы заблокированы.

for element in seq_Dict:
for key, value in element.items():
    if element['Sample'] in sampleIDs:
        finalList.pop()
        finalList.append(element['Sample']+" "+element['Run'])

Здесь finalList.pop() удаляет один объект из вашего массива, а не добавляет один, поэтому вы видите только последнийone.

Кроме того, это бесполезно, потому что в цикле нет ничего for element in seq_Dict:.Используйте только for element in seq_Dict:, поскольку вы не касаетесь key и value

for element in seq_Dict: 
for key, value in element.items():
    if element['Sample'] in sampleIDs:

Наконец, вот последняя версия, которую я бы вам предложил.

for element in seq_Dict:
    if element['Sample'] in sampleIDs:
        finalList.append(sample +" "+element['Run'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...