python - لغة - دورة بايثون من الصفر الى الاحتراف




إنشاء قاموس مع فهم قائمة في بيثون (7)

أنا أحب بناء جملة فهم بيثون.

هل يمكن استخدامه لإنشاء قواميس أيضًا؟ على سبيل المثال ، عن طريق تكرار أكثر من أزواج من المفاتيح والقيم:

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work

إنشاء قاموس مع فهم قائمة في بيثون

أنا أحب بناء جملة فهم بيثون.

هل يمكن استخدامه لإنشاء قواميس أيضًا؟ على سبيل المثال ، عن طريق تكرار أكثر من أزواج من المفاتيح والقيم:

mydict = {(k,v) for (k,v) in blah blah blah}

إذا افترضنا أن blah blah blah يمكن التلاعب به من مجموعتين - فأنت قريب جدا. دعونا نخلق بعض "blahs" من هذا القبيل:

blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]

بناء جملة فهم

الآن بناء الجملة هنا هو جزء رسم الخرائط. ما يجعل هذا الفهم dict بدلاً من فهم مجموعة (وهو ما يقارب pseudocode الخاص بك) هو النقطتين :

mydict = {k: v for k, v in blahs}

و الأن:

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}

إضافة فلتر:

تمامًا مثل قائمة الفهم ، يمكنك إضافة جزء الفلتر إلى النهاية:

>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}

هنا نختبر إذا كان آخر حرف قابل للقسمة على 2.


استخدام بيثون dict الفهم. إليك الصفحة لمعرفة المزيد عنها: Dict Comprehensions .


جرب هذا،

def get_dic_from_two_lists(keys, values):
    return { keys[i] : values[i] for i in range(len(keys)) }

افترض لدينا قائمتين بلد ورأس المال

country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']

ثم قم بإنشاء قاموس من القائمتين:

print get_dic_from_two_lists(country, capital)

الإخراج هو مثل هذا ،

{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}

في Python 2.6 وما قبله ، يمكن أن يحصل مُنشئ dict على تكرارية من أزواج المفاتيح / القيم:

d = dict((key, value) for (key, value) in iterable)

من Python 2.7 و 3 فصاعدًا ، يمكنك فقط استخدام بنية فهم dict مباشرة:

d = {key: value for (key, value) in iterable}

بالطبع ، يمكنك استخدام التكرار بأي طريقة تريد (الصفوف والقوائم الحرفية ، وفهم المولدات ، وفهم القوائم ، وظائف المولدات ، والتكوين الوظيفي ... يشعر بالإبداع) طالما أن كل عنصر هو نفسه قابل للتكرار من عنصرين:

d = {value: foo(value) for value in sequence if bar(value)}

def key_value_gen(k):
   yield chr(k+65)
   yield chr((k+13)%26+65)
d = dict(map(key_value_gen, range(26)))

في Python 3 / Python 2.7+ dict comprehensions works like this:

d = {k:v for k, v in iterable}

لبيثون 2.6 وما قبلها ، انظر إجابة فورتران .


في الواقع ، أنت لا تحتاج حتى إلى التكرار أكثر من التكرار إذا كانت بالفعل تفهم نوعًا ما من الخرائط ، وهو منشئ الدكتات يفعل ذلك بكرم:

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}

هنا مثال آخر على إنشاء القاموس باستخدام الفهم dict:

ما أريد فعله هنا هو إنشاء قاموس أبجدي لكل زوج ؛ هو الحرف الإنجليزية والموقف المقابل لها في الأبجدية الإنجليزية

>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in 
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>> 

لاحظ استخدام التعداد هنا للحصول على قائمة من الحروف الهجائية والفهارس في القائمة ومبادلة الحروف الأبجدية والمؤشرات لإنشاء زوج قيمة المفتاح للقاموس

آمل أن يعطيك فكرة جيدة عن قاموس القاموس ويشجعك على استخدامه في كثير من الأحيان لجعل الرمز الخاص بك مضغوط







dict-comprehension