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
是一个数字,假设是123
。 str(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)
对,然后删除
所以我不得不编写一个程序,根据植物的高度将植物的样本 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
是一个数字,假设是123
。 str(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)
对,然后删除