Pergunta

Eu estou tentando criar um dicionário Python a partir de uma lista armazenada. trabalhos deste primeiro método

>>> myList = []
>>> myList.append('Prop1')
>>> myList.append('Prop2')
>>> myDict = dict([myList])

No entanto, o seguinte método não funciona

>>> myList2 = ['Prop1','Prop2','Prop3','Prop4']
>>> myDict2 = dict([myList2])
ValueError: dictionary update sequence element #0 has length 3; 2 is required

Então, eu estou perguntando por que o primeiro método, usando obras de anexação, mas o segundo método não funciona? Existe uma diferença entre myList e myList2?

Editar

verificado novamente myList2 na verdade tem mais de dois elementos. segundo exemplo atualizado para refletir isso.

Foi útil?

Solução

Você está fazendo errado.

O construtor dict() não toma uma lista de itens (muito menos uma lista contendo uma única lista de itens), leva um iterável de iterables de 2 elementos. Então, se você alterou o código a ser:

myList = []
myList.append(["mykey1", "myvalue1"])
myList.append(["mykey2", "myvalue2"])
myDict = dict(myList)

Em seguida, você iria conseguir o que você espera:

>>> myDict
{'mykey2': 'myvalue2', 'mykey1': 'myvalue1'}

A razão que isso funciona:

myDict = dict([['prop1', 'prop2']])
{'prop1': 'prop2'}

É porque está interpretando-a como uma lista que contém um elemento que é uma lista que contém dois elementos.

Essencialmente, o construtor dict leva seu primeiro argumento e executa código semelhante a este:

for key, value in myList:
    print key, "=", value
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top