如何解决仅使用 1 个集合作为输入参数从`itertools.product` 生成长度为 1 的元组时,如何解包元组?
我试图通过使用 itertools.product
迭代多个集合来设置多个字典的默认值。当字典的键是元组时,这很有效。因此,来自 value
的每个 itertools.product
都是一个元组,可以用作 dict_x.setfault(value,[])
。当字典的键是单个值时就会出现问题。
# example of problem
set_a = {1,2,3,4}
dict_y = {1:'blah',2:'blahblah'}
for key in itertools.product(set_a):
dict_y.setdefault(key,'hi')
print(dict_y)
# output: {1:'blah',2:'blahblah',(1,):'hi',(2,(3,(4,):'hi'}
因此键 {1,2} 不应该用于在 dict_y 中设置为默认值。首选输出是 {1:'blah',3:'hi',4:'hi'}
我使用循环、查找、列表推导来迭代所有字典和设置默认值所需的集合。我没有明确的 set_a
或 dict_y
。因此,很难单独处理具有单值键的情况(例如避免使用 itertools)。如果满足以下条件,在 key
中获得所需的 setdefault for loop
会很有帮助:
- 有一种方法可以只解压长度为 1 的元组或
- 从
dict_y[1] == dict_y[(1)] != dict_y[(1,)]
开始解包和打包元组 - 当
itertools.product
只有 1 个集合作为输入参数时,防止获取元组
解决方法
您的数据表示可能存在一些歧义。第一段 似乎表明首选方法是使用带键的字典 基于元组。
如果是这样,下面的代码怎么样:
import itertools
set_a = {1,2,3,4}
dict_y = {(1,): 'blah',(2,): 'blahblah'}
for key in itertools.product(set_a):
dict_y.setdefault(key,'hi')
print(dict_y)
# {(1,): 'blahblah',(3,): 'hi',(4,): 'hi'}
您的示例似乎基于标量键。这段代码可以在这样的情况下工作
一个案例,根本不需要 itertools.product
:
set_a = {1,4}
dict_y = {1: 'blah',2: 'blahblah'}
for key in set_a:
dict_y.setdefault(key,'hi')
print(dict_y)
# {1: 'blah',2: 'blahblah',3: 'hi',4: 'hi'}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。