当元组的长度为 1 时,如何解压缩元组,该元组仅使用 1 个集合作为输入参数从"itertools.product"生成?



我试图通过使用itertools.product迭代多个集合来设置多个字典的默认值。当字典的键是元组时,这很有效。所以itertools.product中的每个value是一个元组,可以用作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,):'hi', (3,):'hi', (4,):'hi'}

所以键{1,2}不应该被用来在dict_y中设置为default。首选输出为{1:'blah',2:'blahblah',3:'hi', 4:'hi'}

我使用循环,查找,列表推导来迭代所有字典和设置默认值所需的集合。我没有明确的set_adict_y。因此,很难单独处理单值键的情况(如避免使用itertools)。如果:

,在setdefault for loop中获得所需的key将是有帮助的:
  1. 有一种方法可以解压缩长度为1的元组或
  2. dict_y[1] == dict_y[(1)] != dict_y[(1,)]
  3. 开始解包和打包元组
  4. itertools.product只有1个set作为输入参数时,防止获得元组

您的数据表示中可能存在一些歧义。第一段似乎建议首选的方法是使用带有键的字典基于元组。

如果是这种情况,那么下面的代码如何:

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,): 'blah', (2,): 'blahblah', (3,): 'hi', (4,): 'hi'}

你的例子似乎是基于标量键。此代码将在这样的情况下工作一个case,根本不需要itertools.product:

set_a = {1,2,3,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'}

相关内容

  • 没有找到相关文章

最新更新