我基本上有一个文件夹中所有文件的列表,在简化版本中,该列表如下所示:

file_list = [ 'drug.resp1.17A.tag', 'drug.resp1.96A.tag', 'drug.resp1.56B.tag', 'drug.resp2.17A.tag', 'drug.resp2.56B.tag', 'drug.resp2.96A.tag']

另一个 list :
drug_list = [ '17A', '96A', '56B']

我想将这两个列表组合成一个字典,例如:
dictionary = {
    '17A' : ['drug.resp1.17A.tag' , 'drug.resp2.17A.tag' ],
    '96A' : ['drug.resp1.96A.tag' , 'drug.resp2.96A.tag' ],
    '56B' : ['drug.resp1.56B.tag' , 'drug.resp2.56B.tag' ]}

我想到这样做,但是被卡住了!
dict_drugs = {}
for file in file_list:
    list_filename = file.split('.')
    for elem in drug_list:
        if elem in list_filename:

将元素加入字典后,我该怎么办?还是这样做完全错误?

最佳答案

好吧,你不需要内循环

>>> file_list = [ 'drug.resp1.17A.tag', 'drug.resp1.96A.tag', 'drug.resp1.56B.tag', 'drug.resp2.17A.tag', 'drug.resp2.56B.tag', 'drug.resp2.96A.tag']
>>> dictonary = {}
... for i in file_list:
...     k = i.split('.')[-2]
...     if k in dictonary:
...         dictonary[k].append(i)
...     else:
...         dictonary[k] = [i]
>>> dictonary
62: {'17A': ['drug.resp1.17A.tag', 'drug.resp2.17A.tag'],
 '56B': ['drug.resp1.56B.tag', 'drug.resp2.56B.tag'],
 '96A': ['drug.resp1.96A.tag', 'drug.resp2.96A.tag']}
>>>

再检查一次是否只需要使用drug_list中存在的那些值

表示file_list是否包含:

file_list = [' drug.resp1.18A.tag ','drug.resp1.96A.tag','drug.resp1.56B.tag','drug.resp2.17A.tag','drug.resp2。 56B.tag”,“drug.resp2.96A.tag”]
>>> drug_list = [ '17A', '96A', '56B']
... dictonary = {}
... for i in file_list:
...     k = i.split('.')[-2]
...     if k in drug_list:
...         if k in dictonary:
...             dictonary[k].append(i)
...         else:
...             dictonary[k] = [i]
>>>

有效处理大写字母的另一种方法:
dictonary = dict(((i,[]) for i in drug_list))

dictonary = {drug: [] for drug in drug_list}  # As @J.F. Sebastian suggested.

for file in file_list:
    k = file.split('.')[-2]
    if k in dictonary:
        dictonary[k].append(file)

关于python - 如果模式匹配,将两个列表组合成字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14057357/

10-12 22:52