سؤال

وأنا أحاول أن إنشاء قاموس بيثون من قائمة المخزنة. يعمل هذا الأسلوب الأول

>>> 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() لا تأخذ قائمة وحدات (أقل بكثير من قائمة تحتوي على قائمة واحدة من البنود)، فإنه يأخذ iterable من iterables 2-عنصر. حتى إذا قمت بتغيير التعليمات البرمجية لتكون:

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