gpt4 book ai didi

python - 如何使用 lambda 获取列表中过滤项的索引?

转载 作者:行者123 更新时间:2023-12-03 13:51:44 36 4
gpt4 key购买 nike

我有一份水果 list [{'name': 'apple', 'qty': 233}, {'name': 'orange', 'qty': '441'}]
当我过滤列表 orange使用 lambda,list(filter(lambda x: x['name']=='orange', fruits)) ,我得到了正确的字典,但我无法得到字典的索引。索引应该是 1 而不是 0。

如何获得过滤项目的正确索引?

enter image description here

最佳答案

您可以使用列表推导式和 enumerate() 反而:

>>> fruits = [{'name': 'apple', 'qty': 233}, {'name': 'orange', 'qty': '441'}]
>>> [(idx, fruit) for idx, fruit in enumerate(fruits) if fruit['name'] == 'orange']
[(1, {'name': 'orange', 'qty': '441'})]

就像评论中发布的@ChrisRands 一样,您也可以使用 filter通过为您的 fruits 创建一个枚举对象列表:
>>> list(filter(lambda fruit: fruit[1]['name'] == 'orange', enumerate(fruits)))
[(1, {'name': 'orange', 'qty': '441'})]
>>>

以下是这两种方法的一些时间:
>>> setup = \
"fruits = [{'name': 'apple', 'qty': 233}, {'name': 'orange', 'qty': '441'}]"
>>> listcomp = \
"[(idx, fruit) for idx, fruit in enumerate(fruits) if fruit['name'] == 'orange']"
>>> filter_lambda = \
"list(filter(lambda fruit: fruit[1]['name'] == 'orange', enumerate(fruits)))"
>>>
>>> timeit(setup=setup, stmt=listcomp)
1.0297133629997006
>>> timeit(setup=setup, stmt=filter_lambda)
1.6447856079998928
>>>

关于python - 如何使用 lambda 获取列表中过滤项的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45634062/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com