鱼C论坛

 找回密码
 立即注册
查看: 1304|回复: 2

[已解决]组成新字典,值返回可迭代对象

[复制链接]
发表于 2021-8-19 12:43:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教鱼油高手:

有两个长度相等的字典dict1和dict2,要把它们组成一个新的字典,key是两个组成的tuple,value是对应的值组成的tuply。比如:{'a': 1, 'b': 2, 'c': 3} 和 {'a': 1, 'd': 2, 'b': 2}组成{('a','a'):(1, 1), ('b','d'):(2, 2), ('c', 'b'):(3, 2)}

我写的代码如下:

def dict_couple(dict1,dict2):
    """key in 2 dicts, combine them and return\
a new dict with both keys and values in pair"""
    dict3 = {}
    dict3 = dict3.fromkeys(zip(dict1.keys(),dict2.keys()),\
                          zip(dict1.values(),dict2.values()))
                          
    print(dict3)
                           
dict1 = eval(input('key in the first dict:'))
dict2 = eval(input('key in the 2nd dict:'))
dict_couple(dict1,dict2)

在IDLE的运行如下:

key in the first dict:dict(r=1,b=2,c=5,k=7,f=3)
key in the 2nd dict:dict(a=9,m=4,n=6,l=0,p=8)
{('r', 'a'): <zip object at 0x0000014A3F720980>, ('b', 'm'): <zip object at 0x0000014A3F720980>, ('c', 'n'): <zip object at 0x0000014A3F720980>, ('k', 'l'): <zip object at 0x0000014A3F720980>, ('f', 'p'): <zip object at 0x0000014A3F720980>}

不知道问题出在哪里了?为何value返回的是可迭代对象?如何改正?
最佳答案
2021-8-19 14:37:58
.fromkeys() 肯定不能这么用,它是给多个keys指定一个统一值(默认值)的。
直接这样,就行了
In [11]: dict(zip(zip(d1.keys(), d2.keys()) , zip(d1.values(), d2.values())))
Out[11]: {('a', 'a'): (1, 1), ('b', 'd'): (2, 2), ('c', 'b'): (3, 2)}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-19 13:41:30 | 显示全部楼层
1..fromkeys是给多个key统一的value,因此不会解包, 所有显示<zip object at 0x0000014A3F720980>
2.python3.6之前字典是无序的,所以无法做到a,a组合,b,d组合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-19 14:37:58 | 显示全部楼层    本楼为最佳答案   
.fromkeys() 肯定不能这么用,它是给多个keys指定一个统一值(默认值)的。
直接这样,就行了
In [11]: dict(zip(zip(d1.keys(), d2.keys()) , zip(d1.values(), d2.values())))
Out[11]: {('a', 'a'): (1, 1), ('b', 'd'): (2, 2), ('c', 'b'): (3, 2)}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 17:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表