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

如何使用列表中的多个值创建Python字典?,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我有一个Python列表,如下所示: ['Phylum_C3.30', 'CDgu97FdFT6pyfQWZmquhFtiKrL1yp', 'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT_legend', 'pAnstdjgs3Dzzc8I0fOLERPeXNZIuT', 'Family_E3.30', 'iKUmlH47RuphW3NbqXykn0ayizhztF', 'ZzTzTLMDCHIkPBo9waDG3lBZi6u2hG_legend', 'ZzTzTLMDCHIkP

我有一个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'
    ],
}

只需在列表上循环,如果一个值作为一个键进行测试,则将其存储为所看到的最“最近”的键,并将该键的列表添加到字典中。然后,对于所有其他非键值,将其添加到与上次看到的键关联的列表中:

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_键将导致重复条目覆盖以前的条目。或者,如果重复条目被认为是一个bug,那么您可以在输出中为if current_键引发一个异常。

您预期的输出无效。是否要创建一个以列表作为值的字典?你自己试过什么了吗?我觉得不错。我唯一的建议是,在第一个元素不是有效键的情况下,检查当前的_键是否仍然为None,但是如果您信任输入,您可能会放弃此操作。这只会导致字典中有一个None键,这不是什么大问题。@CurtisLusmore:因为没有键作为第一个元素是一个bug,不检查会给我们一个免费的例外。它不会导致字典中没有键;你会得到一个键错误