Вопрос

Я пытаюсь создать словарь Python из сохраненного списка. Этот первый метод работает

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

Однако следующий метод не работает

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

Поэтому мне интересно, почему первый метод, использующий метод добавления, работает, а второй не работает? Есть ли разница между myList и myList2 ?

Изменить

Проверено снова myList2 на самом деле содержит более двух элементов. Обновлен второй пример, чтобы отразить это.

Это было полезно?

Решение

Вы делаете это неправильно.

Конструктор dict () не принимает список элементов (тем более, список, содержащий один список элементов), он принимает итерацию из двухэлементных итераций. Так что, если вы изменили свой код на:

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

Тогда вы получите то, что ожидаете:

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

Причина, по которой это работает:

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

Это потому, что он интерпретирует его как список, который содержит один элемент, который является списком, который содержит два элемента.

По сути, конструктор dict принимает первый аргумент и выполняет код, подобный следующему:

for key, value in myList:
    print key, "=", value
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top