2016-12-31 2 views
-4

Я нашел эту программу, когда я проходил через книгу, и я не могу ее понять. Может кто-нибудь объяснить это в простых терминахПожалуйста, объясните эту программу?

girls = ['alice', 'bernice', 'clarice'] 
boys = ['chris', 'arnold', 'bob'] 
letterGirls = {} 
for girl in girls: 
    letterGirls.setdefault(girl[0], []).append(girl) 
    print [b+'+'+g for b in boys for g in letterGirls[b[0]]] 
+1

Что, в частности, Разве вы не понимаете? – EJoshuaS

ответ

0
girls = ['alice', 'bernice', 'clarice'] 
boys = ['chris', 'arnold', 'bob'] 

girls и boys являются два lists

`letterGirls = {}` 

letterGirls является метод dictionary

setdefault() установит dict_var[key]=default если ключ уже не в dict_var (в вашем случае dict_varletterGirls)

dict_var.setdefault() использование

dict-var.setdefault(somekey,[]).append(somevalue)

В коде

letterGirls.setdefault(girl[0], []).append(girl) 

сделает словарь формы

{'c': ['clarice'], 'b': ['bernice'], 'a': ['alice']} 

ключ girl[0] т.е. первая буква имени.

С вашим скриптом возникла проблема с отступом. Другим разумным результатом будет Key error.

Это должно быть

girls = ['alice', 'bernice', 'clarice'] 
boys = ['chris', 'arnold', 'bob'] 
letterGirls = {} 
for girl in girls: 
    letterGirls.setdefault(girl[0], []).append(girl) 
print ([b+'+'+g for b in boys for g in letterGirls[b[0]]]) 

вашего выхода

['chris+clarice', 'arnold+alice', 'bob+bernice'] 

является obatined, принимая каждый элемент в списке мальчиков и найти имя девушки с тем же первой буквой из словаря letterGirls

+0

спасибо! @jophab – Faruq

+0

@Faruq Не стесняйтесь отмечать как правильные и давать upvote – jophab