Pergunta

Eu tenho três listas, o primeiro é uma lista de nomes, o segundo é uma lista de dicionários, eo terceiro é uma lista de dados. Cada posição em uma lista corresponde com as mesmas posições nas outras listas. List_1 [0] tem dados correspondente em list_2 [0] e List_3 [0], etc gostaria de ligar estes três listas para um dicionário, dentro de um dicionário, com os valores em list_1 sendo as chaves primárias. Como posso fazer isso, mantendo tudo em ordem?

Foi útil?

Solução

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [7,8,9]
>>> dict(zip(a, zip(b, c)))
{1: (4, 7), 2: (5, 8), 3: (6, 9)}

Veja a documentação para mais informações sobre zip.

Como lionbest pontos abaixo, você pode querer olhar para itertools.izip() se o seu dados de entrada é grande. izip faz essencialmente a mesma coisa que zip, mas cria iteradores em vez de listas. Desta forma, você não criar grandes listas provisórias antes de criar o dicionário.

Outras dicas

Python 3:

combined = {name:dict(data1=List_2[i], data2=List_3[i]) for i, name in enumerate(List_1)}

Python 2.5:

combined = {}
for i, name in enumerate(List_1):
    combined[name] = dict(data1=List_2[i], data2=List_3[i])

Se a ordem dessas coisas importa, você não deve usar um dicionário. por definição, eles são não-ordenada. você pode usar um dos muitas implementações ordered_dictionary flutuando ao redor ou espera para Python 2.7 ou 3.1 que incluirá uma implementação de dicionário no módulo coleções ordenada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top