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

Jaf*_*son 1 python sorting file python-3.x

我正在尝试使用以下逻辑对包含基于其所拥有的域的电子邮件的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])
Run Code Online (Sandbox Code Playgroud)

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

    keys.sort()
AttributeError: 'dict_keys' object has no attribute 'sort'
Run Code Online (Sandbox Code Playgroud)

请允许,让我知道如何使其成功运行.

Mos*_*oye 6

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

keys = list(data.keys())
keys.sort()
Run Code Online (Sandbox Code Playgroud)

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

keys = sorted(data.keys())
Run Code Online (Sandbox Code Playgroud)

另一方面,你应该考虑这部分代码,这样每次将新密钥添加到dict时,都不会进行排序,而是在循环结束时进行排序.

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

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])]))
Run Code Online (Sandbox Code Playgroud)