gpt4 book ai didi

python - 如何使用 map 或 filter 而不是列表理解来过滤特定值的嵌套字典(pythonic 方式)?

转载 作者:太空狗 更新时间:2023-10-30 02:41:33 25 4
gpt4 key购买 nike

我有一个嵌套字典。

>>> foo = {'m': {'a': 10}, 'n': {'a': 20}}
>>>

我想根据“a”的值过滤特定值。

我可以为此目的使用列表理解。

>>> [foo[n] for n in foo if foo[n]['a'] == 10]
[{'a': 10}]
>>>

单独使用 list 可以得到 foo 中的元素(而不是元素的值)——正如预期的那样:

>>> list(filter(lambda x: foo[x] if foo[x]['a']==10 else None,foo))
['m']
>>>

使用 map 返回不需要的“无”值:

>>> list(map(lambda x: foo[x] if foo[x]['a']==10 else None,foo))
[{'a': 10}, None]
>>>

结合这两者,我可以获取所需的值。但我猜 foo 被迭代了两次——过滤器和 map 各一次。列表理解解决方案只需要我迭代一次。

>>> list(map(lambda t: foo[t], filter(lambda x: foo[x] if foo[x]['a']==10 else None,foo)))
[{'a': 10}]
>>>

这是另一种只使用过滤器的方法。这给了我想要的值,但我不确定迭代字典的值是否是一种好的/pythonic 方法:

>>> list(filter(lambda x: x if x['a'] == 10 else None, foo.values()))
[{'a': 10}]
>>>

我想知道是否:

  1. 对于这种情况,pythonic/推荐的方法是什么?
  2. 最后一个对字典值使用过滤器的例子是否可以接受?

问候

沙拉德

最佳答案

列表理解可以很好地做到这一点。

>>> foo = {'m': {'a': 10}, 'n': {'a': 20}}
>>> [v for v in foo.values() if 10 in v.values()]
[{'a': 10}]

如果您要匹配字典中的已知键,则不需要 for 循环或列表理解。

In [15]: if 10 in foo['m'].values():
...: result = [foo['m']]
...:

In [16]: result
Out[16]: [{'a': 10}]

关于python - 如何使用 map 或 filter 而不是列表理解来过滤特定值的嵌套字典(pythonic 方式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39178715/

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