繁体   English   中英

如何将字符串列表转换为键以给定 substring 开头的列表字典

[英]How to convert a list of strings to a dict of lists where keys start with given substring

我有一个这样的列表:

list = ['ID - ISO', 'CATA - CIT', 'CATA - CIT2', 'ID - ISO6', 'CATA - CIT', 'CATA - CIT2', 'CATA - CIT6', 'CATA - CIT8']

我想创建一个这样的字典

dict = {'ID - ISO': ['CATA - CIT', 'CATA - CIT2'], 
        'ID - ISO6': ['CATA - CIT', 'CATA - CIT2', 'CATA - CIT6', 'CATA - CIT8']}

所以我开发了这段代码,但是当我添加值时,它不起作用:所有 id 的值都是相同的。

with open("/data/myfile") as openfile:
        for line in openfile:
        for single_line in line.split('\\'):
            if line.startswith("ID"):
                 Dict[line] = None
            elif line.startswith("CATA"):
                for li in Dict:
                    Dict[li]=line
print Dict

您可以使用itertools.groupby()

from itertools import groupby
lst = ['ID - ISO', 'CATA - CIT', 'CATA - CIT2','ID - ISO6', 'CATA - CIT', 'CATA - CIT2', 'CATA - CIT6', 'CATA - CIT8']

result = {}
for k,v in groupby(lst, lambda x: x.startswith('ID')):
    if k:
        key = next(v)
    else:
        result[key] = list(v)

print(result)

这会产生

{
 'ID - ISO': ['CATA - CIT', 'CATA - CIT2'], 
 'ID - ISO6': ['CATA - CIT', 'CATA - CIT2', 'CATA - CIT6', 'CATA - CIT8']
}

此外,不要在内置类型( listdicttuple等)之后调用您的变量 - 如果您这样做,您实际上是在隐藏功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM