当元组的长度为1时,如何将元组解包?该元组是从“itertools.product”生成的,只使用1个set作为输入参数?

2024-10-01 09:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过使用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,):'hi', (3,):'hi', (4,):'hi'}

因此,在dict_y中不应该使用键{1,2}设置为默认值。首选输出为{1:'blah',2:'blahblah',3:'hi', 4:'hi'}

我使用循环、查找、列表理解来迭代设置默认值所需的所有字典和集合。我没有set_adict_y的解释。因此,很难单独使用单值键处理案例(如避免使用itertools)。在setdefault for loop中获得所需的key是有帮助的,如果:

  1. 有一种方法可以解压长度为1或1的元组
  2. dict_y[1] == dict_y[(1)] != dict_y[(1,)]开始解包和打包元组
  3. itertools.product只有1个设置为输入参数时,防止获取元组

Tags: 方法keyfor字典valueproducthidict
1条回答
网友
1楼 · 发布于 2024-10-01 09:24:31

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

如果是这样,那么下面的代码如何:

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'}

您的示例似乎基于标量键。此代码将在这样的环境中工作 一个完全不需要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'}

相关问题 更多 >