【发布时间】:2020-03-28 14:08:41
【问题描述】:
我的项目是一个初级的漫游 AI。当它的意识范围内有食物时,它会朝它走去。如果它有不止一种食物,它应该选择最近的。
我将食物作为键存储在字典中,分配给键的值是到所述食物的最后已知距离。 然后我检查字典中距离最短的食物,以便朝它前进。
问题是超出范围的食物被赋值为 None(也尝试过 False),并且在使用时
min(self.vision, key=self.vision.get)
它返回它找到的第一个具有 None/False 值的键。通过在在线编译器上进行测试,我发现在较旧的 python 版本上存在这个错误:
TypeError:不可排序的类型:NoneType()
我猜现在认为 None 类型总是小于数字(也用整数测试)。
我正在尝试结合 lambdas、过滤器、列表、分钟、地图和其他功能,但我想我实际上是愚蠢的。我总是取回值而不是键,或者最终得到一个无济于事的过滤列表。
我也不喜欢创建两个 dicts 的想法,例如“seen”和“unseen” foods,尽管这是一个真正的可能性。
最小的可重现示例: (注释/取消注释底部的第三行以获得错误)
class Test:
def __init__(self,x,y):
self.x, self.y = x,y
x = {}
for i in range(3):
for j in range(3):
x[Test(i,j)] = (i+j)
# x[Test(9,9)] = None
m = min(x, key=x.get)
print(m.x,m.y)
【问题讨论】:
-
你能提供一个minimal reproducible example 吗?您的字典中似乎有
None值以及浮点数。您可能需要先过滤掉它们。 -
如果您要分配值,为什么不使用
float('inf')? -
刚刚添加了一个示例。 float('inf') 听起来正是我想要的!
标签: python sorting dictionary minimum