简体   繁体   中英

Enumerate function with similar strings in a list

Writing a script to read several csv files. I have a list of 3 distinct barcodes. Each code has three different files. Each code has the same prefix '5SvF9yM6ldXGRpBz'. This is part of a longer lists of barcodes.

I have another list of directories where the barcodes are found. In order for the script to run, I need all three files

My goal is build a dictionary of distinct barcodes and directories. I'm having a problem with the output. One of the three barcodes is missing. '5SvF9yM6ldXGRpBz1'. I think the issue is with the enumerate function in the for loop.

 directories = ['C:/Desktop/5SvF9yM6ldXGRpBz1_FIRST.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz11_FIRST.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz12_FIRST.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz1_SECOND.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz11_SECOND.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz12_SECOND.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz1_THIRD.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz11_THIRD.csv',
'C:/Desktop/5SvF9yM6ldXGRpBz12_THIRD.csv']

barcodes = ['5SvF9yM6ldXGRpBz1',
'5SvF9yM6ldXGRpBz11',
'5SvF9yM6ldXGRpBz12',
'5SvF9yM6ldXGRpBz1',
'5SvF9yM6ldXGRpBz11',
'5SvF9yM6ldXGRpBz12',
'5SvF9yM6ldXGRpBz1',
'5SvF9yM6ldXGRpBz11',
'5SvF9yM6ldXGRpBz12']

#print(directories)
#print(barcodes)

barcodes = list(set(barcodes))
barcodes = [s for s in barcodes if "5SvF9yM6ldXGRpBz" in s] #Want to process codes with this prefix 
directories = list(set(directories))
#print(directories)
directories = [s for s in directories if "5SvF9yM6ldXGRpBz" in s]
#print(directories)

barcode_dirs_indexes =[]
for b_code in barcodes:
   #print(b_code)
   index = [i for i,x in enumerate(directories) if b_code in x] #I think the issue is here
   barcode_dirs_indexes.append(index)
   #print(barcode_dirs_indexes)

barcode_dirs = [[directories[x] for x in y] for y in barcode_dirs_indexes]

# only process barcode with 3 directories, i.e. the barcode has 3 files 
data_barcode_dir_indx = [i for i,x  in enumerate(barcode_dirs) if len(x) == 3 ]
data_barcode_dirs = [x for x in barcode_dirs if len(x) == 3]
#print(data_barcode_dir_indx)
#print(data_barcode_dirs)
complete_data_barcodes = [barcodes[x] for x in data_barcode_dir_indx]
print(complete_data_barcodes)
dir_file_dict = dict(zip(complete_data_barcodes, data_barcode_dirs)) 

Output of dir_file_dict: It is missing barcode: 5SvF9yM6ldXGRpBz1

{'5SvF9yM6ldXGRpBz12': ['C:/Desktop/5SvF9yM6ldXGRpBz12_FIRST.csv', 
'C:/Desktop/5SvF9yM6ldXGRpBz12_THIRD.csv', 'C:/Desktop/5SvF9yM6ldXGRpBz12_SECOND.csv'], 
'5SvF9yM6ldXGRpBz11': ['C:/Desktop/5SvF9yM6ldXGRpBz11_FIRST.csv', 
'C:/Desktop/5SvF9yM6ldXGRpBz11_SECOND.csv', 'C:/Desktop/5SvF9yM6ldXGRpBz11_THIRD.csv']}

You could do:

d = {}
for i,j in zip(barcodes, directories):
  if not d.get(i):
    d[i] = []
  d[i].append(j)

print(d)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM