有没有办法从列表推导中创建列表元组?
类似的东西:
actual_clients_emails, actual_client_names = [partner.email, partner.name for partner in op_client.ResPartner.browse([])]
我想从一个列表中创建2个列表。
我可以这样做:
actual_clients_emails = [partner.email for partner in op_client.ResPartner.browse([])]
actual_client_names = [partner.name for partner in op_client.ResPartner.browse([])]
答案 0 :(得分:6)
只需使用the zip()
built-in function:
actual_clients_emails, actual_client_names = zip(
*[(partner.email, partner.name)
for partner in op_client.ResPartner.browse([])])
答案 1 :(得分:1)
是
client_names = tuple([partner.email, partner.name for partner in op_client.ResPartner.browse([])])
答案 2 :(得分:1)
我喜欢优雅的一行代码,但在这种情况下,为了清晰起见,我更愿意将其拆分:
partners = op_client.ResPartner.browse([]) # get the partners list
actual_clients_emails = [p.email for p in partners]
actual_client_names = [p.name for p in partners]
如果“合作伙伴”是一个列表,这应该可以正常工作。
如果不是它是一个发电机,你不应该两次要求它来生成你的合作伙伴序列。在这种情况下,这段代码应该更好:
partners = op_client.ResPartner.browse([]) # get the partners generator
mail_name_generator = ((p.email, p.name) for p in partners) # generator for your info
email, names = zip(*mail_name_generator) # unpack it
这第二个解决方案是,IMO,可读性较差,因此更糟糕。它虽然更加pythonic,而且功能更多。