我正在将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'])
我在print语句中遇到错误
list indices must be integer,not str
编辑我想按升序对值进行排序。
答案 0 :(得分:2)
你无法对dict进行排序。 Dicts是元素的无序映射。
让我们分析以下几行:
dict_Lab_Features=sorted(dict_Lab_Features.items(), key=operator.itemgetter(1))
来自sorted的文档:
从iterable中的项目返回一个新的排序列表。
之后,dict_Lab_Features是键值元组的排序列表。之后,您尝试使用'Hello'
print(dict_Lab_Features['Hello'])
在这里,您尝试使用'Hello'
为该列表编制索引,这就是您收到错误list indices must be integer,not str
答案 1 :(得分:2)
在这一行:
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
答案 2 :(得分:1)
dict_Lab_Features
时, dict
不再是dict.items()
。无法使用字符串键来处理dict.items()
对象(它实际上只是元组列表[(key, value), ... ]
)。
此外,“排序”您打算按名称使用的字典也没有多大意义。看起来您需要collections.OrderedDict
或者您应该完全跳过订购