我有一本这样的字典:
d = {('a','b','c'):4, ('e','f','g'):6}
并且我想要一组这样的元组:
{('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}
我已经尝试过这种方式:
b = set(zip(d.keys(), d.values()))
但是输出是这样的:
set([(('a', 'b', 'c'), 4), (('e', 'f', 'g'), 6)])
我该如何解决?谢谢!
答案 0 :(得分:6)
在Python> = 3.5中,您可以在此generalized unpacking中使用set comprehension:
{(*k, v) for k, v in d.items()}
# {('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}
但是,像suggested by Aran-Fey这样更普遍适用的tuple
串联方法并没有那么冗长:
{k + (v,) for k, v in d.items()}
答案 1 :(得分:3)
您不想将键与值压缩在一起,而是希望将它们连接起来:
>>> {k + (v,) for k, v in d.items()}
{('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}
答案 2 :(得分:3)
使用集合的理解来遍历键,值对,然后根据分解(解压后的)键和值创建新的元组:
>>> {(*k, v) for k, v in d.items()}
{('e', 'f', 'g', 6), ('a', 'b', 'c', 4)}
答案 3 :(得分:0)
或尝试map
:
print(set(map(lambda k: k[0]+(k[1],),d.items())))
或者(python 3.5以上版本):
print(set(map(lambda k: (*k[0],k[1]),d.items())))