python为什么将字典转换为列表?

时间:2020-03-14 06:03:06

标签: python python-3.x dictionary

我的脚本从具有用户日志历史记录的文件(syslog.txt)中读取,解析文件中的每个日志条目,并创建2个字典(错误,per_user)以显示给定错误发生了多少个实例,以及每个用户获得的INFO或ERROR实例的数量。一切正常,直到这里。代码似乎可以正常工作。问题在于输出是2个列表,而不是2个字典。我不知道为什么。预先非常感谢。

这是脚本:

import re
import operator

per_user = {}
error = {}

with open("syslog.txt") as f:
    content = f.readlines()
    for i in content:
        if "ERROR" in i:
            result_error = re.search(r"ERROR ([\w\' ]+) [^\w]",i)
            if not result_error.group(1) in error:
                error[result_error.group(1)] = 1
            else:
                error[result_error.group(1)] += 1

        result_user = re.search(r"(INFO|ERROR).*\(([\w\.]+)\)",i)  
        if not result_user.group(2) in per_user:
            per_user[result_user.group(2)] = dict()
        if not result_user.group(1) in per_user[result_user.group(2)]:
            per_user[result_user.group(2)][result_user.group(1)] = 1
        else:
            per_user[result_user.group(2)][result_user.group(1)] += 1


error = sorted(error.items(), key=operator.itemgetter(1), reverse=True) 
per_user = sorted(per_user.items(), key=operator.itemgetter(0))

print(type(error))
print(type(per_user))

下面是输出:

<class 'list'>

<class 'list'>

2 个答案:

答案 0 :(得分:1)

摘自sorted的文档:

从可迭代的项目中返回新的排序列表。

如果sorted未返回列表,那就出乎意料了。

答案 1 :(得分:1)

注意:

sorted(iterable):返回一个包含所有来自可迭代项的新列表

如果您想要dictionary

尝试一下:

error = dict(error)
per_user = dict(per_user)