python - 对(字符串, float )的字典进行排序时,字符串索引超出范围

标签 python sorting dictionary

我有一个字典将字符串映射到我想要排序的 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/

相关文章:

python - 读/写一个文件,其中每一行都是一个字典的列表

python - 为什么将我的数据转换为 ndarray 会给我 'python' 信号 SIGBUS 终止(地址未对齐错误)?

java - 查找未排序数组中第 k 个最小的元素

sorting - 二级排序 - 将其留给 Hadoop 框架或在 reducer 中自己完成

arrays - 为什么 Swift 字典在内存过程中比数组慢得多

python - 如何使用文件中的列表边界框位置裁剪多图像(python)?

python - 如何在 Python 3 的内部类中动态初始化对象?

python - 按两个字段对 Python 列表进行排序

java - 如何以 Java 格式打印嵌套 Hashmap

c# - 有两个键的字典?