بيثون خطأ في إنشاء القاموس
-
06-07-2019 - |
سؤال
وأنا أحاول أن إنشاء قاموس بيثون من قائمة المخزنة. يعمل هذا الأسلوب الأول
>>> 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