简体   繁体   中英

Convert dictionary with tuples as keys to tuples that contain keys and value

I have a dictionary like this:

d = {('a','b','c'):4, ('e','f','g'):6}

and I would like to have a set of tuples like this:

{('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}

I've tried in this way:

b = set(zip(d.keys(), d.values()))

But the output is this:

set([(('a', 'b', 'c'), 4), (('e', 'f', 'g'), 6)])

How can i solve that? Thanks!

In Python >= 3.5, you can use generalized unpacking in this set comprehension :

{(*k, v) for k, v in d.items()}
# {('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}

But the more universally applicable tuple concatenation approach as suggested by Aran-Fey is not significantly more verbose:

{k + (v,) for k, v in d.items()}

You don't want to zip the keys with the values, you want to concatenate them:

>>> {k + (v,) for k, v in d.items()}
{('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}

Use a set comprehension to iterate over the key, value pairs, and then create new tuples from the exploded (unpacked) key and the value:

>>> {(*k, v) for k, v in d.items()}
{('e', 'f', 'g', 6), ('a', 'b', 'c', 4)}

Or try map :

print(set(map(lambda k: k[0]+(k[1],),d.items())))

Or (python 3.5 up):

print(set(map(lambda k: (*k[0],k[1]),d.items())))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM