gpt4 book ai didi

python - 从字典中存在的列表值中获取单个 "set"对象

转载 作者:行者123 更新时间:2023-11-28 20:33:26 25 4
gpt4 key购买 nike

我正在尝试从字典的值构建一个集合。每个字典值都是一个字符串列表。

{'a': ['a','b','c'],'b':['a','b','d'],...}

我正在尝试使用 .update(x) 连接一个包含字典值的集合。我已经成功地使用了标准的 for 循环:

ingredientSet = set()
for values in recipes.values():
ingredientSet.update(values)

如果可能的话,我想做的是在一个集合理解中做到这一点。到目前为止我有这个:

ingredientSet = { ingredientSet.update(x) for x in recipes.values() }

但我的 IDE 给我一个错误,“ingredientSet”在赋值之前被引用。

是否可以在推导式中使用 .update(x),或者是否有其他方法可以在推导式中将项目连接到集合中?

最佳答案

这是使用 itertools.chain.from_iterable(...) 实现此目的的实用方法:

>>> from itertools import chain
>>> my_dict = {'a': ['a','b','c'],'b':['a','b','d']}

>>> set(chain.from_iterable(my_dict.values()))
{'a', 'b', 'c', 'd'}

此外,使用 set().union(...) 在评论中添加 jonsharpe 的 答案:

>>> set().union(*my_dict.values())
{'a', 'b', 'd', 'c'}

性能比较

下面是Python3上所有答案的timeit对比:

  • 使用 itertools.chain.from_iterable - 每个循环 0.558 usec

    mquadri$ python3 -m timeit -s "from itertools import chain; my_dict = {'a': ['a','b','c'],'b':['a','b','d']}" "set(chain.from_iterable(my_dict.values()))"
    1000000 loops, best of 3: 0.558 usec per loop
  • 使用集合理解 - 每个循环 0.585 usec

    mquadri$ python3 -m timeit -s "from itertools import chain; my_dict = {'a': ['a','b','c'],'b':['a','b','d']}" "{item for items in my_dict.values() for item in items}"
    1000000 loops, best of 3: 0.585 usec per loop
  • 使用 set().union(...) - 每个循环 0.614 usec

    mquadri$ python3 -m timeit -s "from itertools import chain; my_dict = {'a': ['a','b','c'],'b':['a','b','d']}" "set().union(*my_dict.values())"
    1000000 loops, best of 3: 0.614 usec per loop

关于python - 从字典中存在的列表值中获取单个 "set"对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670754/

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