gpt4 book ai didi

python - 循环创建一个元组

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:05 24 4
gpt4 key购买 nike

我正在尝试实现群发邮件。

这是群发邮件文档:Just a link to the Django Docs

为了实现这一点,我需要创建这个元组:

datatuple = (
('Subject', 'Message.', 'from@example.com', ['john@example.com']),
('Subject', 'Message.', 'from@example.com', ['jane@example.com']),
)

我查询 ORM 以获取一些收件人详细信息。然后我会想象其中涉及一些循环,每次都将另一个接收者添加到元组中。除了用户名和电子邮件之外,消息的所有元素都是相同的。

到目前为止我有:

recipients = notification.objects.all().values_list('username','email')
# this returns [(u'John', u'john@example.com'), (u'Jane', u'jane@example.com')]
for recipient in recipients:
to = recipient[1] #access the email
subject = "my big tuple loop"
dear = recipient[0] #access the name
message = "This concerns tuples!"
#### add each recipient to datatuple
send_mass_mail(datatuple)

我一直在尝试类似的方法: SO- tuple from a string and a list of strings

最佳答案

如果我没理解错的话,理解起来还是很简单的。

emails = [
(u'Subject', u'Message.', u'from@example.com', [address])
for name, address in recipients
]
send_mass_mail(emails)

请注意,我们利用 Python 的能力将 tuple 解包到一组命名变量中。对于 recipients 的每个元素,我们将其第零个元素分配给 name 并将其第一个元素分配给 address。所以在第一次迭代中,nameu'John'addressu'john@example.com'.

如果您需要根据名称改变'Message.',您可以使用字符串格式或您选择的任何其他格式/模板机制来生成消息:

emails = [
(u'Subject', u'Dear {}, Message.'.format(name), u'from@example.com', [address])
for name, address in recipients
]

由于以上是列表理解,它们导致 emails 成为 list。如果您真的需要它是一个元组而不是列表,那也很容易:

emails = tuple(
(u'Subject', u'Message.', u'from@example.com', [address])
for name, address in recipients
)

对于这一个,我们实际上是将一个生成器对象传递给 tuple 构造函数。这具有使用生成器的性能优势,而无需创建中间 list 的开销。您几乎可以在 Python 中接受可迭代参数的任何地方执行此操作。

关于python - 循环创建一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34054765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com