在python中使用defaultdict

2024-04-24 19:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将txt文件中的项目读入list,然后将其转换为字典,如下所示-

def getfeatures_into_list(inputfilename):
    fid=open(inputfilename,"r")
    dict_Lab_Features=defaultdict(int)
    list1=[]
    for line in fid:
        list1.append(line.rstrip().lower())
    list1=list(set(list1))  #Removing duplicates
    c=0
    for items in sorted(list1):
        dict_Lab_Features[items]=c
        c+=1

    dict_Lab_Features=sorted(dict_Lab_Features.items(), key=operator.itemgetter(1))
    print(dict_Lab_Features['Hello'])

我在打印报表时出错了

list indices must be integer,not str

编辑我想按值升序对dict进行排序。你知道吗


Tags: 文件项目intxtforlinelabitems
3条回答

dict_Lab_Features在调用dict.items()时不再是dict。一个dict.items()对象不能用字符串键寻址(它实际上只是一个元组列表[(key, value), ... ])。你知道吗

此外,按名称“排序”你打算使用的词典也没有多大意义。看起来您要么需要一个collections.OrderedDict,要么干脆跳过订购

在此行中:

dict_Lab_Features=sorted(dict_Lab_Features.items(), key=operator.itemgetter(1))

您重新分配了dict_Lab_Features,因此它是一个列表。这是因为sorted()的输出总是一个列表。当然,列表不能将字符串作为索引。你知道吗

你应该学会把字典看作是天生的未分类的。当您确实需要跟踪插入顺序时,可以使用OrderedDict,但对于大多数情况,常规的dict就可以了。你只需要养成按所需顺序遍历字典的习惯,而不用担心字典是否按任何顺序存储。你知道吗

按排序顺序遍历字典的通常方法是循环遍历已排序的键,例如:

for key in sorted(dict_Lab_Features):
    print dict_Lab_Features[key]

或者

for key, value in sorted(dict_Lab_Features.items()):
    print value

或者,如果要循环排序的值

for value in sorted(dict_Lab_Features.values()):
    print value

不能对dict进行排序。dict是元素的无序映射。你知道吗

让我们分析一下下面这行:

dict_Lab_Features=sorted(dict_Lab_Features.items(), key=operator.itemgetter(1))

来自sorted的文档:

Return a new sorted list from the items in iterable.

所以在那之后,dict\u Lab\u Features是一个键值元组的排序列表。之后,您尝试用'Hello'索引它

print(dict_Lab_Features['Hello'])

在这里您尝试用'Hello'索引该列表,这就是为什么会出现错误list indices must be integer,not str

相关问题 更多 >