Python 拆分字典项

Python 拆分字典项,python,dictionary,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)

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

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}
然后在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")
Dic1.keys()中sam的
:
ymlFile=sam+'\u job.yml'
ymlFH=打开(ymlFile,'w')
#书写
ymlFH.write(“reads1:[\n”)
ln1=len(Dic1[sam])
ct1=0
对于排序中的R1(Dic1[sam]):
ct1+=0

如果ct1我想你的意思是
sample\u dict
是这样的

sample_dict={
'SAP':['SAP_MM_1.gz', 'SAP_MM_2.gz'],
'LUF':['LUF_1.gz', '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}
如果您想将值保存在一个列表中,就像这里的
{'SAP':['SAP_MM_1.gz'],…
那样,您可以将值端用括号括起来,如下所示

Dic1={x:[sample_dict[x][0]] for x in sample_dict}
编辑

由于
sample\u dict
中的列表似乎并不总是以排序开始,因此我们可以在理解dict之前快速排序

for x in sample_dict:
    sample_dict[x].sort()
注意:这个简单的方法假设列表中的所有文件名都是好的、统一的,并且按照我们想要的排序。如果不是这样,它将稍微有点棘手

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']}]

请分享你所做的尝试far@Hamms谢谢,addedI在上面的建议中有一个小问题,当我循环使用
Dic1
时,它没有使用字典中的第一项。例如,`For sample1.keys()中的sam:如果列表中有100个元素,则需要100个dictcomps:Dic1、Dic2…Dic100?@user1017373我不确定是否理解您的命令comment@MykolaZotko是的,目前情况就是这样。因为OP将它们显示为不同的变量,所以我就是这样写我的答案的。你当然可以把所有的格言放在一个列表或其他什么东西中。好的,我在这就是方向。