所以我有这样的字典, 这些字典是从列表创建的
list= ['SAP', 'LUF']
fastqs = []
sample_dict = dict((sample,[]) for sample in list)
print(sample_dict)
for k in sample_dict:
for z in fastqs:
if k in z:
sample_dict[k].append(z)
print(sample_dict)
dict_items([('SAP', ['SAP_MM_1.gz', 'SAP_MM_2.gz']), ('LUF',['LUF_1.gz', 'LUF_2.gz'])])
现在我需要将上面的字典拆分为,我的目的是将这些部分拆分为
Dic1 = {'SAP': ['SAP_MM_1.gz'],
'LUF': ['LUF_1.gz']}
Dic2 = {'SAP': ['SAP_MM_2.gz'],
'LUF': ['LUF_2.gz']}
在拆分字典中,我需要进一步使用值和键将它们打印到文件中。
例如,首先将字典拆分为
Dic1={x:sample_dict[x][0] for x in sample_dict}
Dic2={x:sample_dict[x][1] for x in sample_dict}
然后遍历字典中所有keys
的for循环。
for sam in Dic1.keys():
ymlFile = sam + '_job.yml'
ymlFH = open(ymlFile, 'w')
# writing
ymlFH.write("reads1: [\n")
ln1=len(Dic1[sam])
ct1=0
for R1 in sorted(Dic1[sam]):
ct1+=0
if ct1 <= ln1:
ymlFH.write(" {class: File, path: " + R1 + "},\n")
elif ct1 == ln1 :
ymlFH.write(" {class: File, path: "+ R1 + "}\n")
ymlFH.write("]\n")
现在,我希望将两个文件写入到ymlFH
文件中,其中包含for循环中所有已定义的步骤。但是只写入一个文件。也就是说,只有一个密钥被写入ymlFH
。
答案 0 :(得分:1)
单线:
d = {
'SAP':['SAP_MM_1.gz', 'SAP_MM_2.gz'],
'LUF':['LUF_1.gz', 'LUF_2.gz']
}
l = [{'SAP':[i], 'LUF':[j]} for i, j in zip(d['SAP'], d['LUF'])]
# [{'LUF': ['LUF_1.gz'], 'SAP': ['SAP_MM_1.gz']},
# {'LUF': ['LUF_2.gz'], 'SAP': ['SAP_MM_2.gz']}]
答案 1 :(得分:0)
我认为您是说sample_dict
就是这样
sample_dict={
'SAP':['SAP_MM_1.gz', 'SAP_MM_2.gz'],
'LUF':['LUF_1.gz', 'LUF_2.gz']
}
您可以进行一些dict理解
Dic1={x:sample_dict[x][0] for x in sample_dict}
Dic2={x:sample_dict[x][1] for x in sample_dict}
如果您想像在{'SAP': ['SAP_MM_1.gz'],....
一样将值保留在列表中,则可以像这样将值面包裹在方括号中
Dic1={x:[sample_dict[x][0]] for x in sample_dict}
编辑
由于sample_dict
中的列表似乎并不总是按排序开始的,因此我们可以在 进行dict理解之前快速对其进行排序。
for x in sample_dict:
sample_dict[x].sort()
注意:这个简单的方法确实假定列表中的所有文件名都将是很好的,统一的并且按照我们想要的排序。如果不是这种情况,那将更加棘手