Skip to main content
 首页 » 编程设计

python之根据域对大电子邮件文件进行排序显示错误

2025年05月04日30mfrbuaa

我正在尝试使用以下逻辑根据电子邮件的域对包含电子邮件的 1 GB 文件进行排序:

data = {} 
emails = open('test','r',encoding='ascii',errors='ignore') 
for email in emails.readlines(): 
    (user, domain) = email.split('@') 
    data[domain] = email 
    keys = data.keys() 
    keys.sort() 
print([data[x] for x in keys]) 

当我使用 Python 3.5 运行该文件时,出现以下错误:

    keys.sort() 
AttributeError: 'dict_keys' object has no attribute 'sort' 

请告诉我如何才能使其成功运行。

请您参考如下方法:

您需要在返回的 dict_keys 对象上调用 list 以将其转换为具有 list.sort 方法的列表:

keys = list(data.keys()) 
keys.sort() 

或者直接在 dict_keys 对象上调用 sorted 来返回一个排序列表:

keys = sorted(data.keys()) 

另一方面,您应该缩进这部分代码,这样排序就不会在每次向 dict 添加新键时进行,而是在循环结束时进行。

或者如果您实际上不需要键列表,则直接在字典上应用 sorted:

for email in emails.readlines(): 
    (user, domain) = email.split('@') 
    data[domain] = email 
print([v for _, v in sorted(data.items(), key=lambda x: x[0])]))