我有一个字典将字符串映射到我想要排序的 float 。我可以验证值的类型是否正确,但是当我尝试排序时,我得到一个 IndexError
执行。
下面是一段代码。验证循环运行良好,然后对 sorted 的调用失败。
for k, v in metric.items():
if not isinstance(v, float):
print "Bad value %s for %s" % (k, str(v))
rank = sorted(metric, key=operator.itemgetter(1), reverse=True)
---> 10 rank = sorted(metric, key=operator.itemgetter(1), reverse=True)
11
IndexError: string index out of range
知道为什么会这样吗?
编辑:这也毫无问题地通过了:
for h in metric.iteritems():
if not isinstance(operator.itemgetter(1)(h), float):
print "Bad value %s for %s" % (h[0], h[1])
最佳答案
您只是对字典的键 进行排序。显然你的一些键只有 1 个字符短,所以你得到 key[1]
的索引错误(这是 operator.itemgetter(1)(key)
会尝试访问)。
如果预期的输出是一个排序的键序列,从字典中查找值:
rank = sorted(metric, key=metric.get, reverse=True)
如果您需要一系列 (key, value)
对,请对 metric.items()
进行排序:
rank = sorted(metric.items(), key=operator.itemgetter(1), reverse=True)
当对 dict.items()
序列进行排序时,item[1]
引用该值。
关于python - 对(字符串, float )的字典进行排序时,字符串索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32673802/