如果键匹配,如何连接字典的值

时间:2018-10-24 13:30:07

标签: python list dictionary join

我有这样的字典

Dic1 = 
{'SAP_10_L1': ['SAP_10_L1_R1_001.gz'],'SAP_10_L2': ['SAP_10_L2_R1.gz'],
 'SOS-02289_4_5_L1': ['SOS_4_5_L1.gz'],
 'SOS-02289_4_5_L2': ['SOS_4_5_L2.gz']}

现在,如果键的第一部分与值的第一部分匹配,那么我需要加入Dic的值。键的第一部分一直到“ L”,上面的示例SAP_10和SOA_4_5是唯一的第一部分。我的目标是让我的Dic1像这样:

Dic1 = {'SAP_10_L1': ['SAP_10_L1_R1_001.gz','SAP_10_L2_R1.gz'],
 'SOS-02289_4_5_L1': ['SOS_4_5_L1.gz','SOS_4_5_L2.gz']}

我尝试过这个:

{i:list(j) for i in Dic1.keys() for j in Dic1.values()}

但是它不能满足我的需求。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这是使用itertools

的一种方法

例如:

from itertools import groupby, chain

d = {'SAP_10_L1': ['SAP_10_L1_R1_001.gz'],'SAP_10_L2': ['SAP_10_L2_R1.gz'],
 'SOS-02289_4_5_L1': ['SOS_4_5_L1.gz'],
 'SOS-02289_4_5_L2': ['SOS_4_5_L2.gz']}

result = {}
for k,v in groupby(sorted(d.items()), lambda x: x[0].rsplit("_", 1)[0]):
    value = list(v)
    result[value[0][0]] = list(chain.from_iterable([i[1] for i in value]))
print(result)

输出:

{'SAP_10_L1': ['SAP_10_L1_R1_001.gz', 'SAP_10_L2_R1.gz'],
 'SOS-02289_4_5_L1': ['SOS_4_5_L1.gz', 'SOS_4_5_L2.gz']}