我试图使用排序()函数,因为OrderedDict对我来说是不可用的(python2.6.6)。但是,我得到了“列表索引必须是int,而不是tuple”错误。
我试着在字典中使用排序()函数,当我尝试使用一些虚拟值时,它工作得很好,但是我不知道为什么它不能在我的特定代码上工作。
venue_dict = {}
for venues in venue_names:
venue_dict[venues] = False
venue_dict = sorted(venue_dict)我得到了这个TypeError:列表索引必须是整数,而不是str
所以我为每个地点创建了一个值为False的字典。(venue_names是所有场馆名称的列表)假名仅用作标志值。
无论如何,我尝试打印排序字典,但收到元组错误。有人知道为什么吗?我试着在谷歌上搜索,但还没有找到解决方案。
发布于 2019-07-12 20:41:21
内置的排序()函数不适用于具有默认参数的字典,因为默认的排序键将是( key,value)对。这是一个元组,不是可排序的项目。
您可以确保通过lambda函数将字典键用作排序键:
mydict = sorted(mydict, key=lambda k: k[0]) # just the key from the (key, value) tuple或者,您可以直接对字典中的项进行排序:
mydict = sorted(mydict.items())然而,上面的语句将返回元组列表。如果您想要一个实际的有序字典,您必须使用一个OrderedDict。由于您使用的是Python2.6,这只是Python2.7中的一部分,您可以通过运行秩序来通过PIP安装pip install ordereddict包。然后:
from ordereddict import OrderedDict
mydict = OrderedDict(sorted(mydict.items()))发布于 2019-07-12 20:49:14
如果您根据排序列表创建字典,它将立即按正确的顺序排列:
venue_dict = {name:False for name in sorted(venue_names)}注意,venue_dict = sorted(venue_dict)将把venue_dict变量更改为list,因为sorted(venue_dict)返回一个键列表,它不会对字典进行排序。这可能是您在以后使用venue_dict时会出现错误的原因。
顺便说一句,如果您使用的是Python的旧版本(例如2.7),那么字典就没有定义的顺序,因此根本无法对它们进行排序。您应该更新到Python的最新版本,或者使用双重间接方式:例如访问排序的名称列表->使用名称作为字典的下标。
实际上,我无法检查这一点,但我相信旧版本的OrderedDict的构造函数会以同样的方式工作:
venue_dict = OrderedDict( (name,False) for name in sorted(venue_names) )如果其他所有操作都失败,则可以从排序的键访问字典:
venue_dict = dict()
for name in venue_names: venue_dict[name] = False
for name in sorted(venue_dict):
print(name, venue_dict[name])https://stackoverflow.com/questions/57013674
复制相似问题