2015-11-30 3 views
0

Рассмотрите словарь, который хранит первые имена в виде ключей и возрастов как значения: myf = {«Эми»: 19, «Мэри»: 18, «Билл»: 21, «Кейт»: 23, Zack ": 20}python dictionary myd problems

A) Напишите код python, который создаст новый словарь myg, который не содержит студентов, имена которых начинаются с букв« A »или« M »или« S ».

B) Разбить словарь myf на два словаря myf1 и myf2 таким образом, чтобы myf1 содержал только тех учеников, возраст которых меньше и равен 10 и чье имя начинается с букв «M-Z», а myf2 содержит остальные.

These are my attempts: 

A) n = len(myf) 
for i = 1:n 
    if myf[i] = "A", "R", "S" 

B) myf = myf1 + myf2 
for i in myf1 
    myf1 = myf <= 10 
else: 
    myf2 

Мое понимание А слабее, чем В. Я понимаю, что каждый вопрос спрашивает, я просто не знаю, как сформулировать рабочий код для каждого. Любой, кто может помочь мне исправить мои коды, будет очень благодарен!

ответ

0

myg = {} 
for key in myf: 
    if key[0] not in {'A','R','S'}: myg[key] = myf[key] 

B

myf1 = {} 
myf2 = {} 
for key in myf: 
if key[0] >= 'M' and myf[key] <= 10: 
    myf1[key] = myf[key] 
else: myf2[key] = myf[key] 
1

Раствор для A:

>>> dict((key, value) for key, value in myf.items() if key[0] not in ['A', 'M', 'S']) 
>>> myg 
{'Bill': 21, 'Zack': 20, 'Cate': 23} 

Раствор для B (примечание: возраст меньше и равно 10 получит пустой Dict , Я меняю его на 20, чтобы вы могли лучше понять, как должен быть фактический результат)

>>> import string 
>>> mtoz = string.ascii_uppercase[12:] 
>>> mtoz 
'MNOPQRSTUVWXYZ' 
>>> myf1 = dict((key, value) for key, value in myf.items() if key[0] in mtoz and value <= 20) 
>>> myf1 
{'Mary': 18, 'Zack': 20} 
>>> myf2 = dict(item for item in myf.items() if item not in myf1.items()) 
>>> myf2 
{'Amy': 19, 'Bill': 21, 'Cate': 23}