背景:
我在Python列表中存储了一个名称和电子邮件地址列表。
user_data_list = [['Adam', 'adam@abc.com'],
['Alice', 'alice@stu.edu'],
['Eve', 'eve@abc.com'],
['Bob', 'bob@abc.com']]
我有两个列表,分别包含旧的和更新的电子邮件地址old_domain_email_list
和new_domain_email_list
。列表的内容是:
old_domain_email_list = ['adam@abc.com', 'eve@abc.com', 'bob@abc.com']
new_domain_email_list = ['adam@xyz.com', 'eve@xyz.com', 'bob@xyz.com']
我打算将电子邮件地址更新为现在包含xyz.com
而不是abc.com
。下面的代码行遍历user_data_list
并更新列表中匹配的条目。
for user in user_data_list:
for old_domain_email, new_domain_email in zip(old_domain_email_list, new_domain_email_list):
if user[1] == old_domain_email:
user[1] = new_domain_email
然后将更改后的name
和email address
对写入CSV文件。
with open(report_file_location, 'w+') as output_file:
writer = csv.writer(output_file)
writer.writerows(user_data_list)
output_file.close()
查询:
由行user_data_list
更新的user[1] = ' ' + new_domain_email
中的用户详细信息是否发生在原地?该代码不会明确地尝试修改user_data_list
,但是writer.writerows(user_data_list)
方法仍然可以正确地创建具有更新域名的新文件。
使用的Python版本:3.6.9
我希望我能弄清楚这个问题。
答案 0 :(得分:1)
是的,修改正在进行中。 user[i] = ...
调用user
的{{1}}方法,该方法不会更改__setitem__
引用指向的对象。
答案 1 :(得分:0)
是的。您可以使用列表理解功能简化电子邮件地址的替换。
[[i[0], i[1].split('@')[0]+'@xyz.com'] for i in user_data_list]
结果:
[['Adam', 'adam@xyz.com'], ['Alice', 'alice@xyz.com'], ['Eve', 'eve@xyz.com'], ['Bob', 'bob@xyz.com']]