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

问题描述:

我有一个Python列表如下图所示:如何使用列表中的多个值创建一个Python字典?

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

我希望有一本字典,其中键会以“Pylum”或“类”或“订单”或“家庭”或“属开头的元素'和值将跟随该元素的所有值,直到下一个元素具有'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

您的预期输出是无效的Python。你是否想创建一个带有* lists *的字典作为值?你有没有尝试过自己呢? –

简单地遍历列表,如果值测试,密钥存储,作为最“近”键看出,并为该密钥的字典添加一个列表。那么对于所有其他非关键值添加到相关联的列表中最后一个见过键:

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案例的例外情况。

+0

对我很好。我唯一的建议是在第一个元素不是有效密钥的情况下检查'current_key'是否仍然是'None',但如果您信任输入,则可能会放弃这一点。它只会产生一个带有“None”键的字典,而不是一个大问题。 –

+0

@CurtisLusmore:因为没有一个关键字作为第一个元素会是一个错误,没有检查给我们一个免费的例外情况。它将*不*导致以'None'作为关键字的字典;你会得到一个'KeyError' –