首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果键匹配,如何加入字典的值

如果键匹配,如何加入字典的值
EN

Stack Overflow用户
提问于 2018-10-24 13:30:06
回答 1查看 43关注 0票数 0

我有这样的字典

代码语言:javascript
复制
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看起来像这样:

代码语言:javascript
复制
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']}

我试过这个:

代码语言:javascript
复制
{i:list(j) for i in Dic1.keys() for j in Dic1.values()}

但它并没有产生我所需要的。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 13:39:57

这是一种使用itertools的方法

Ex:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
{'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']}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52970301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档