微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决仅使用 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_adict_y。因此,很难单独处理具有单值键的情况(例如避免使用 itertools)。如果满足以下条件,在 key 中获得所需的 setdefault for loop 会很有帮助:

  1. 有一种方法可以只解压长度为 1 的元组
  2. dict_y[1] == dict_y[(1)] != dict_y[(1,)] 开始解包和打包元组
  3. 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?