简体   繁体   中英

tuple to list conversion within dictionary values (list of lists (and tuples))

I am dealing with a dictionary that is formatted as such:

dic = {'Start': [['Story' , '.']], 
       'Wonderful': [('thing1',), ["thing1", "and", "thing2"]], 
       'Amazing': [["The", "thing", "action", "the", "thing"]], 
       'Fantastic': [['loved'], ['ate'], ['messaged']], 
       'Example': [['bus'], ['car'], ['truck'], ['pickup']]}

if you notice, in the story key, there is a tuple within a list. I am looking for a way to convert all tuples within the inner lists of each key into lists.

I have tried the following:

for value in dic.values():
    for inner in value:
       inner = list(inner)

but that does not work and I don't see why. I also tried an if type(inner) = tuple statement to try and convert it only if its a tuple but that is not working either... Any help would be very greatly appreciated.

edit: I am not allowed to import, and only have really learned a basic level of python. A solution that I could understand with that in mind is preferred.

You need to invest some time learning how assignment in Python works .

inner = list(inner) constructs a list (right hand side), then binds the name inner to that new list and then... you do nothing with it.

Fixing your code:

for k, vs in dic.items():
    dic[k] = [list(x) if isinstance(x, tuple) else x for x in vs]   

You need to update the element by its index

for curr in dic.values():
    for i, v in enumerate(curr):
        if isinstance(v, tuple):
            curr[i] = list(v)

print(dic)

Your title, data and code suggest that you only have tuples and lists there and are willing to run list() on all of them, so here's a short way to convert them all to lists and assign them back into the outer lists (which is what you were missing) ( Try it online! ):

for value in dic.values():
    value[:] = map(list, value)

And a fun way ( Try it online! ):

for value in dic.values():
    for i, [*value[i]] in enumerate(value):
        pass

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