#python #dictionary #for-loop #nested
#питон #словарь #для-петли #вложенный
Вопрос:
Я использую python 3.9 и пытаюсь взять информацию из списка python и словаря python и повторить ее в цикле. Правильный адрес электронной почты будет взят из словаря в зависимости от устройства.
Когда я выполняю свой код, он трижды повторяется над каждым членом списка, и я не знаю, как заставить его этого не делать. Я считаю, что начальный цикл for выполняется нормально и получает металл, но является ли это вторым циклом, из-за которого он выполняется три раза для каждого элемента, и как это исправить?
Я понимаю, что это довольно глупо, но я, должно быть, где-то совершаю фундаментальные ошибки, и после попыток разобраться в этом в течение последних 5 часов пришло время обратиться за помощью.
# Dictionary of metals and email addresses metals = { 'gold':'1@gmail.com', 'silver':'2@gmail.com', 'platinum':'3@gmail.com', } # Variable holding some string data gold = """ Gold is a chemical element with the symbol Au and atomic number 79, """ silver = """ Silver is a chemical element with the symbol Ag and atomic number 47. """ platinum = """ Platinum is a chemical element with the symbol Pt and atomic number 78. """ units = [gold, silver, platinum] # What I want to do is have a loop where it takes the item in the list #, for example, gold, matches it with the key to that in the dictionary, thereby # enabling me to send gold to 1@gmail.com, silver to 2@gmail.com, and platinum to # 3gmail.com for unit in units: for metal in metals.items(): if unit == gold: email_address = metals.get('gold') print(email_address) elif unit == silver: email_address = metals.get('silver') print(email_address) elif unit == platinum: email_address = metals.get('platinum') print(email_address) else: print('No Match') # just some code to print out various bits of information # Print our Dictionary Keys for k in metals.keys(): print('Keys: ' k) # Print our dictionary Values for v in metals.values(): print('Values: ' v) # print out the values held in our list for item in units: print('Items: ' item)
и вот результат:
1@gmail.com 1@gmail.com 1@gmail.com 2@gmail.com 2@gmail.com 2@gmail.com 3@gmail.com 3@gmail.com 3@gmail.com Keys: gold Keys: silver Keys: platinum Values: 1@gmail.com Values: 2@gmail.com Values: 3@gmail.com Items: Gold is a chemical element with the symbol Au and atomic number 79, Items: Silver is a chemical element with the symbol Ag and atomic number 47. Items: Platinum is a chemical element with the symbol Pt and atomic number 78.
Комментарии:
1. В чем смысл внутреннего
for
цикла? Разве вы не можете просто удалить его, так как он делает то, чего вы на самом деле не хотите делать?2. Спасибо @samwise. Иногда я просто переоцениваю вещи. Я полагаю, что в этом и заключается проблема с тем, чтобы быть новичком в этом. просто слишком все усложняю
Ответ №1:
Просто удалите внутреннюю for
петлю, изменив это:
for unit in units: for metal in metals.items(): if unit == gold: email_address = metals.get('gold') print(email_address) elif unit == silver: email_address = metals.get('silver') print(email_address) elif unit == platinum: email_address = metals.get('platinum') print(email_address) else: print('No Match')
к этому:
for unit in units: if unit == gold: email_address = metals.get('gold') print(email_address) elif unit == silver: email_address = metals.get('silver') print(email_address) elif unit == platinum: email_address = metals.get('platinum') print(email_address) else: print('No Match')
Там нет правила, которое говорит, что вам нужно повторять metals
, чтобы позвонить metals.get
.
Ответ №2:
В нем есть 3 предмета metals.items()
. Вот почему цикл выполняется 3 раза. Просто удалите это утверждение; вам не нужен этот цикл
for unit in units: if unit == gold: ...