分割字典项目

时间:2019-01-30 18:23:56

标签: python dictionary

所以我有这样的字典, 这些字典是从列表创建的

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

2 个答案:

答案 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()

注意:这个简单的方法确实假定列表中的所有文件名都将是很好的,统一的并且按照我们想要的排序。如果不是这种情况,那将更加棘手