Geeker_odd 发表于 2021-8-19 12:43:57

组成新字典,值返回可迭代对象

请教鱼油高手:

有两个长度相等的字典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 13:41:30

1..fromkeys是给多个key统一的value,因此不会解包, 所有显示<zip object at 0x0000014A3F720980>
2.python3.6之前字典是无序的,所以无法做到a,a组合,b,d组合

阿奇_o 发表于 2021-8-19 14:37:58

.fromkeys() 肯定不能这么用,它是给多个keys指定一个统一值(默认值)的。
直接这样,就行了
In : dict(zip(zip(d1.keys(), d2.keys()) , zip(d1.values(), d2.values())))
Out: {('a', 'a'): (1, 1), ('b', 'd'): (2, 2), ('c', 'b'): (3, 2)}
页: [1]
查看完整版本: 组成新字典,值返回可迭代对象