Python编程-修改字典中的列表项

时间:2018-08-12 03:20:46

标签: python dictionary

问题:#编写一个程序来修改records词典中的电子邮件地址以反映此更改

records = {57394: ['Suresh Datta', 'suresh@example.com'], 48539: ['ColetteBrowning', 'colette@example.com'], 58302: ['Skye Homsi','skye@example.com'], 48502: ['Hiroto Yamaguchi', 'hiroto@example.com'], 48291: ['Tobias Ledford', 'tobias@example.com'], 48293: ['Jin Xu', 'jin@example.com'], 23945: ['Joana Dias', 'joana@example.com'], 85823: ['Alton Derosa', 'alton@example.com']}

我遍历了字典,并创建了带有值的新列表,并在@处拆分了电子邮件,并能够将电子邮件从.com更改为.org。

我的方法是加入更改后的电子邮件并更改字典的值。但是,我继续收到TypeError:序列项0:预期的str实例,找到了列表

我的代码:

lst2 = []

for value in records.values():
    lst2.append(value[1].split('@'))


for items in lst2:
    items[1] = 'examples.org'

for items in lst2:
    ','.join(lst2) 

3 个答案:

答案 0 :(得分:1)

您可以对其进行单线列表理解,然后迭代并将i的拆分与','合并,因此请尝试以下操作:

print([','.join(i[1].replace('.com','.org').split('@')) for i in records.values()])

输出:

['suresh,example.org', 'colette,example.org', 'skye,example.org', 'hiroto,example.org', 'tobias,example.org', 'jin,example.org', 'joana,example.org', 'alton,example.org']

或者:

print(['@'.join(i[1].replace('.com','.org').split('@')) for i in records.values()])

输出:

['suresh@example.org', 'colette@example.org', 'skye@example.org', 'hiroto@example.org', 'tobias@example.org', 'jin@example.org', 'joana@example.org', 'alton@example.org']

或者如果要编辑字典:

print({k:[i.replace('.com','.org') for i in v] for k,v in records.items()})

输出:

{57394: ['Suresh Datta', 'suresh@example.org'], 48539: ['ColetteBrowning', 'colette@example.org'], 58302: ['Skye Homsi', 'skye@example.org'], 48502: ['Hiroto Yamaguchi', 'hiroto@example.org'], 48291: ['Tobias Ledford', 'tobias@example.org'], 48293: ['Jin Xu', 'jin@example.org'], 23945: ['Joana Dias', 'joana@example.org'], 85823: ['Alton Derosa', 'alton@example.org']}

答案 1 :(得分:1)

问题出在您的最终for循环中:

for items in lst2:
    ','.join(lst2)

您要加入的对象应该不是lst2。但是,如果您修复该问题,将仍然无法使用。您需要创建第三个列表,并向其中添加值:

lst3 = []
for items in lst2:
    lst3.append('@'.join(items))

然后,lst3将具有格式正确的电子邮件。

答案 2 :(得分:0)

尝试以下代码

records = {57394: ['Suresh Datta', 'suresh@example.com'], 48539: ['ColetteBrowning', 'colette@example.com'], 58302: ['Skye Homsi','skye@example.com'], 48502: ['Hiroto Yamaguchi', 'hiroto@example.com'], 48291: ['Tobias Ledford', 'tobias@example.com'], 48293: ['Jin Xu', 'jin@example.com'], 23945: ['Joana Dias', 'joana@example.com'], 85823: ['Alton Derosa', 'alton@example.com']}
for key, value in records.items():
    new_data = []
    for data in value:
        new_data.append(data.replace('.com', '.org'))
    records[key] = new_data

print(records)
  

{57394:['Suresh Datta','suresh@example.org'],48539:['ColetteBrowning','colette@example.org'],58302:['Skye Homsi','skye @ example。 org”],48502:['Hiroto Yamaguchi','hiroto@example.org'],48291:['Tobias Ledford','tobias@example.org'],48293:['Jin Xu','jin @ example .org'],23945:['Joana Dias','joana@example.org'],85823:['Alton Derosa','alton@example.org']}