如何使用列表中的多个值创建Python字典?

时间:2016-09-15 06:46:41

标签: python python-2.7 dictionary

我有一个如下所示的Python列表:

['Phylum_C3.30', 'CDgu97FdFT6pyfQWZmquhFtiKrL1yp', 'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT_legend', 'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT', 'Family_E3.30', 'iKUmlH47RuphW3NbqXykn0ayizhztF', 'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG_legend', 'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG', 'Class_C2.60', 'D0RRB3F0dCl39KuEZNqfdD8q9jKzUu', 'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH_legend', 'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH']

我希望有一个词典,其中键是任何以'Pylum'或'Class'或'Order'或'Family'或'Genus'开头的元素,值将是该元素后面的所有值,直到下一个元素为止'Pylum'或'Class'或'Order'或'Family'或'Genus'。

例如:

最终字典将如下所示:

{
    "Phylum_C3.30": [
        'CDgu97FdFT6pyfQWZmquhFtiKrL1yp',
        'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT_legend', 
        'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT'
    ], 
    "Family_E3.30": [
        'iKUmlH47RuphW3NbqXykn0ayizhztF',
        'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG_legend',
        'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG'
    ],
    "Class_C2.60": [
        'D0RRB3F0dCl39KuEZNqfdD8q9jKzUu',
        'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH_legend',
        'MYe9hzd8BTeg1OW00TMQQ0qc60KWIH'
    ],
}

1 个答案:

答案 0 :(得分:2)

简单地循环遍历列表,如果某个值作为密钥库进行测试,那么最近的'看到的键,并为该键的字典添加一个列表。然后,对于所有其他非键值,添加到与上次看到的键相关联的列表中:

prefixes = ('Pylum', 'Class', 'Order', 'Family', 'Genus')
output = {}
current_key = None
for elem in inputlist:
    if any(elem.startswith(p) for p in prefixes):
        # this is a key, add it to the output
        current_key = elem
        if current_key not in output:
            output[current_key] = []
    else:
        output[current_key].append(elem)

您可以稍微调整一下键的处理方式;删除if current_key not in output会导致重复的条目覆盖以前的条目。或者,如果重复的条目应该是错误,您可以为if current_key in output案例引发异常。