在python中使用defaultdict

在python中使用defaultdict,python,Python,我正在将txt文件中的项目读入列表,然后将其转换为字典,如下所示- 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)

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

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进行排序

调用
dict.items()
时,dict\u Lab\u功能将不再是
dict
dict.items()
对象不能使用字符串键寻址(它实际上只是一个元组列表
[(键,值),…])


此外,对你打算使用的词典按名称进行“排序”也没有多大意义。看起来您需要一个
集合。OrderedDict
,或者您应该完全跳过排序

您不能对dict进行排序。dict是元素的无序映射

让我们分析以下几行:

dict_Lab_Features=sorted(dict_Lab_Features.items(), key=operator.itemgetter(1))
根据以下文件:

从iterable中的项返回新的排序列表

所以在那之后,dict_Lab_Features是一个键值元组的排序列表。之后,您尝试使用
'Hello'

print(dict_Lab_Features['Hello'])
在这里,您尝试使用
'Hello'
对该列表进行索引,这就是为什么在此行中出现错误
列表索引必须是整数,而不是str

dict_Lab_Features=sorted(dict_Lab_Features.items(), key=operator.itemgetter(1))
您已重新分配了
dict\u Lab\u功能
,因此它是一个列表。这是因为
sorted()
的输出总是一个列表。当然,列表不能将字符串作为索引

你应该学会把字典看作是天生没有分类的。当您确实需要跟踪插入顺序时,可以使用
命令dict
,但在大多数情况下,常规的
命令dict
是可以的。您只需养成按所需顺序遍历字典的习惯,而不必担心字典是否按任何顺序存储

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

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

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

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

我想循环排序的值,而不是键。在Python中可能吗?@Noober:当然可以。使用排序(dict\u Lab\u Features.values())。请注意,这是一个值列表。请注意,如果您有两个具有相同值的键,则该值将显示两次。此代码只会根据集合的迭代顺序为每个字符串分配一个数字。你想达到什么目的?添加到@hege_hegedus的评论中:看起来你只是在添加数字,以便将文本行按顺序排列。但是您已经在
list1
中有了行,并且在执行
sorted(list1)
时,它们已经按排序顺序排列好了。
for value in sorted(dict_Lab_Features.values()):
    print value