KeyError:2使用大值时

时间:2015-09-19 05:43:16

标签: python python-3.x dictionary keyerror

所以我必须编写一个程序来根据它们的高度将SAMPLE ID NO的植物排序到一个列表(高度的升序),我制作了一个代码,它只适用于小值。当我输入大值时,它会显示:

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

1 个答案:

答案 0 :(得分:0)

  

我必须编写一个程序来对工厂的SAMPLE ID NO进行排序   根据他们的高度列入一个列表(升序的高度)

因此,如果d包含ids到高度的映射,并且您希望获得按照您想要的高度升序排序的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方法接受一个iterable并创建一个新值字典,其值设置为可迭代。

在这种情况下,q是一个数字,假设它是123str(q)是字符串"123"。 因此d.fromkeys(str(q))是字典{'1': None, '2': None, '3': None }

您将w设置为键列表。因此w['1', '2', '3']

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

当您在上一个循环中输入值时,您可能没有插入任何1键!

从代码I guess 中获取最大值并将其删除。

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

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

此处max在字典中找到具有最大值的(key, value)对,然后删除它。