从dict键列表中查找嵌套的max/min

2024-09-27 09:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大文件中嵌套键值的列表:

mainLs = [{'99999': {'popDensity': 0.0, 'housingDensity': 1.8062141714841409e-07}, '53000': {'popDensity': None, 'housingDensity': None}, '56938': {'popDensity': None, 'housingDensity': None}, '22594': {'popDensity': 0.003762399188257728, 'housingDensity': 0.002336601878903448}, '49194': {'popDensity': 0.0, 'housingDensity': 0.0005159765063886844}, '54232': {'popDensity': 0.0, 'housingDensity': 0.00046439265846193704}, '06000': {'popDensity': None, 'housingDensity': None}, '00562': {'popDensity': 0.0007453821299310868, 'housingDensity': 0.00035915666845218}, '68084': {'popDensity': 0.0, 'housingDensity': 0.0}}]

我想返回一个用户友好的字符串来记录popDensity最高的地方。在

^{pr2}$

我需要保留同一位置的多个实例作为key。有办法吗?在


Tags: 文件实例key字符串用户none列表地方
1条回答
网友
1楼 · 发布于 2024-09-27 09:24:17

关键功能有两个问题:

lambda density: lst[density][k]

首先,key函数的参数将是lst的一个元素,一个位置{},而不是密度,或者任何可以用作list索引的元素。所以:

^{pr2}$

这就是您当前的TypeError;您试图使用一个位置{}作为列表的索引。在


但如果你解决了这个问题,你就有了另一个问题。您试图对一组同时包含float和{}的值调用max。这是模棱两可的,Python不会试图猜出您的意思。{或者说人口不应该被忽略,那么它应该是什么意思呢?一旦你能用英语解释这个规则,你就可以把它翻译成Python。在

例如,下面是一个将None视为最小值的键函数:

place = max(lst, key=lambda place: place[k] if place[k] is not None else -1)

或者,下面是一个跳过None值的生成器表达式:

place = max((place for place in lst if place[k] is not None),
            key=lambda place: place[k])

同时,这假设你首先得到的是一个有效的dicts列表。你给我们看的是一个SyntaxError,所以很难猜出你到底有什么。也许是一张单子的单子,或者是一张单子的单子?在不知道的情况下,很有可能你在迭代你所拥有的任何东西的方式上有另一个错误…但是不可能告诉你如何修复它,除非我们能看到你真正拥有的东西。在

例如,如果你有一个dict的dict,那么mainLs中的每一个东西都只是一个地名,而不是一个dict。另一方面,如果这是一个dict的dict列表,那么mainLs中的每一个东西都将是一个dict,它的唯一键是一个地名,其唯一的值是一个place dict,在这种情况下,您需要在该值中查找密度,而不是在顶层dict中。如果不做任何更改,mainLs中的每一个都适用于其他dict。在

相关问题 更多 >

    热门问题