我正在开发一个函数,该函数以一个字典和一个电子邮件域为键,以一个人员列表为值。
代码如下:
def email_list(domains):
emails = []
for users in domains.values():
for user in users:
emails.append(user)
if user in domains["gmail.com"]:
return [x + "@gmail.com" for x in emails]
elif user in domains["yahoo.com"]:
return [x + "@yahoo.com" for x in emails]
elif user in domains["hotmail.com"]:
return [x + "@hotmail.com" for x in emails]
print(email_list({"gmail.com": ["clark.kent", "diana.prince", "peter.parker"], "yahoo.com": ["barbara.gordon", "jean.grey"], "hotmail.com": ["bruce.wayne"]}))
输出仅返回:
['clark.kent@gmail.com']
有人能解释一下发生了什么以及如何修复它吗??
3条答案
按热度按时间daolsyd01#
我想这就是你想要的
输出:
z9gpfhce2#
A.
return
关键字标记函数的结尾。在代码中,只要return ...
语句执行时,函数结束。因此,代码的其余部分没有任何用处。你可以做一个紧凑的解决方案。
以下是您可以做的:
或者更紧凑
如果要将所有电子邮件地址放在一个列表中,可以执行以下操作:
u59ebvdq3#
让我们浏览一下代码。当你遇到
emails.append(user)
第一次,,user
是“克拉克,肯特”。接下来,您遇到了以下块:在这一点上,,
emails
是['clark.kent']
,所以你的列表理解结果是['clark.kent@gmail.com']
你把它还给我。这里的问题是,您一看到第一个用户就返回。我的做法如下:
请注意,我根本不需要测试域。相反,我只是使用域(键)来构造电子邮件地址。还要注意,我的列表理解是双循环的,但它们与代码是同一个循环。