使用条件来检索字典列表以提取特定元素

时间:2018-09-28 11:59:12

标签: python list dictionary

我有一个巨大的电子表格,正在尝试搜索某些特定数据。

一方面我有这样的ID:

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
...

我正在尝试提取感兴趣的ID的“ Sample”和“ Run”。

我使用内置的阅读器将csv电子表格读入了Dictionary,但是我在提取我感兴趣的元素时遇到了麻烦。

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中最后一个ID的信息,因此我可以看到在循环过程中正在覆盖先前的迭代。 所以我使用了deepcopy,但是那没用。

2 个答案:

答案 0 :(得分:1)

使用您提供给我的新信息,这就是为什么您被屏蔽的原因。

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()从数组中删除一个对象而不是添加一个对象,这就是为什么只看到最后一个对象的原因。

同样,这没有用,因为循环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'])

答案 1 :(得分:1)

尝试:

for element in seq_Dict:
   sample = element['Sample']
   if sample in sampleIDs:
       finalList.append(sample +" "+element['Run'])