我正在尝试使用以下逻辑根据电子邮件的域对包含电子邮件的 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])]))
