将以元组为键的字典转换为包含键和值的元组

时间:2018-10-24 08:15:52

标签: python dictionary tuples

我有一本这样的字典:

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)])

我该如何解决?谢谢!

4 个答案:

答案 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())))