所以我必须编写一个程序来根据它们的高度将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
答案 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
是一个数字,假设它是123
。 str(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)
对,然后删除它。