在包含“ None” /“ False”值的字典中获取具有最小值的键

问题描述 投票:0回答:1

我的项目是基本的漫游AI。当食物在其感知范围之内时,它就会朝着它前进。如果食物不只一种,则应选择最近的食物。

我将食物作为键存储在字典上,并且分配给键的值是到所述食物的最后已知距离。然后我检查字典是否有最短距离的食物,以便朝着它前进。

问题是超出范围的食物被分配了值None(也尝试False),并且使用时>

min(self.vision, key=self.vision.get)

它返回找到的第一个具有None / False值的键。通过在在线编译器上进行测试,我发现在较旧的python版本上存在此错误:

TypeError:不可排序的类型:NoneType()

而且我想它现在认为None类型总是小于数字(也经过ints检验)。

我正在尝试结合使用lambda,过滤器,列表,分钟,地图和其他功能,但我想我实际上是愚蠢的。我总是返回值而不是键,或者最终得到的过滤列表无济于事。

我也不喜欢创建两个指令的想法,例如“可见的”和“不可见的”食物,尽管这是一种现实的可能性。

我的项目是基本的漫游AI。当食物在其感知范围之内时,它就会朝着它前进。如果食物不止一种,则应选择最近的一种。我将食物存储在字典上,作为...

python sorting dictionary minimum
1个回答
0
投票

一种简单的方法:创建(距离,项)的元组,不包括带有None的元组,并从中得到最小值:

food = {'bread': 3, 'apple':2, 'pancake': None, 'ham':1}

reachable = [(distance, item) for item, distance in food.items() if distance is not None]
closest = min(reachable)[1]
print(closest)
# ham
© www.soinside.com 2019 - 2024. All rights reserved.