KeyError: 2 When using large values

KeyError: 2 When using large values

所以我不得不编写一个程序,根据植物的高度将植物的样本 ID 编号排序到列表中(高度升序),我编写了一个代码,它只适用于小值。当我输入大值时,它显示:

Traceback (most recent call last):
  File "C:/Python34/plant_hieght_id.py", line 15, in <module>
  del d[int(w[0])]
KeyError: 2

我的代码可以在以下位置找到:http://pastebin.com/embed_js.php?i=TXQ94tUy

I had to write a program to sort the SAMPLE ID NO's of plants according to their heights into a list (ascending order of heights)

因此,如果 d 包含 ID 到身高的映射,并且您想要获得按身高升序排序的 ID 序列:

e = sorted(d, key=lambda k: d[k], reverse=True)
  • 遍历字典就是遍历键,因此 sorted(d)sorted(d.keys()).

  • 相同
  • 通过指定 key=lambda k: d[k],您可以自定义比较的执行方式。这里比较的是值 d[k] 而不是键

  • 使用reverse=True排序是降序的。 (在您的问题文本中,您说的是升序,但您提供的代码并没有这样做。如果您确实想要升序,只需删除 reverse=True 参数)


您的原始代码的问题在于:

w=list(d.fromkeys(str(q)))

fromkeys 方法接受一个可迭代对象并创建一个新字典,其值设置为该可迭代对象。

这里q是一个数字,假设是123str(q) 是字符串 "123"。 所以 d.fromkeys(str(q)) 是字典 {'1': None, '2': None, '3': None }.

您将 w 设置为键列表。所以 w['1', '2', '3'].

最后 d[int(w[0])] 尝试删除密钥 1但是代码不保证这个key存在!

当您在之前的循环中输入值时,您可能没有插入任何 1 键!

从代码中我猜到你想取最大值,去掉。

如果你想删除你应该做的最大元素:

key, val = max(d.items(), key=lambda x_y: x_y[1])
del d[key]

这里max在字典中找到最大值的(key, value)对,然后删除