Search code examples
pythondictionarymergeappendkey

How to append a dictionary value to an existing dictionary value?


Let's say I have a:

dict = {"Main": ["Tammy","Elisha","Julius"],
        "Elisha": ["Kenneth"]
       }

The context is like a Queue system. The Main is the normal queue. While "Elisha:[Kenneth]" is like a Cut queue. You can imagine everyone is queueing normally for a MacDonald when Elisha decided to bring his friend, Kenneth into the queue.

How do i append "Kenneth" to "Main":"Elisha" so that when I print dict['Main'] it will return the following expected output:

Expected Output: [Tammy, Elisha, Kenneth, Julius ]

If Elisha decided to bring in another friend, "Elisha": ["Nicole"]. Then the expected output would be:

Expected Output: [ Tammy, Elisha, Kenneth, Nicole, Julius ]

I tried googling for append, however append doesn't work for dictionary but only on list.

I tried:

dict['Main'].value("Elisha").append("Kenneth")

but it returned error.


Solution

  • You can recursively print the queue How it works:

    1. Make a empty queue
    2. Start from the first person in the Main queue
    3. Add that person to the empty queue mentioned in 1
    4. Check if there is any friend of that person, if so
    5. Add them in the queue mentioned in 1, and check their friends also if exists
    d = {"Main":["Tammy","Elisha","Julius"],
    
            "Elisha": ["Kenneth"]
           }
    
    def get_flattened_queue(data, key, flattened_queue):
        members = data[key]
        for each_member in members:
            flattened_queue.append(each_member)
            if each_member in data.keys():
                get_flattened_queue(data, each_member, flattened_queue)
        return flattened_queue
    
    flattened_queue = []
    get_flattened_queue(d, 'Main', flattened_queue)
    
    print(flattened_queue)
    
    ['Tammy', 'Elisha', 'Kenneth', 'Julius']
    

    Now suppose Elisa brings Nicole

    d = {"Main":["Tammy","Elisha","Julius"],
    
            "Elisha": ["Kenneth"]
           }
    
    def get_flattened_queue(data, key, flattened_queue):
        members = data[key]
        for each_member in members:
            flattened_queue.append(each_member)
            if each_member in data.keys():
                get_flattened_queue(data, each_member, flattened_queue)
        return flattened_queue
    
    # Here she brings Nicole
    d['Elisha'].append('Nicole')
    
    #{"Main":["Tammy","Elisha","Julius"],
    #        "Elisha": ["Kenneth", "Nicole"]
    #       }
    
    flattened_queue = []
    get_flattened_queue(d, 'Main', flattened_queue)
    
    print(flattened_queue)
    
    ['Tammy', 'Elisha', 'Kenneth', 'Nicole', 'Julius']
    

    d = {"Main":["Tammy","Elisha","Julius"],
    
            "Elisha": ["Kenneth"]
           }
    
    def get_flattened_queue(data, key, flattened_queue):
        members = data[key]
        for each_member in members:
            flattened_queue.append(each_member)
            if each_member in data.keys():
                get_flattened_queue(data, each_member, flattened_queue)
        return flattened_queue
    
    # Here she brings Nicole
    d['Elisha'].append('Nicole')
    
    #{"Main":["Tammy","Elisha","Julius"],
    #        "Elisha": ["Kenneth", "Nicole"]
    #       }
    
    # Nicole brings Epsi95
    d['Nicole'] = ['Epsi95']
    
    flattened_queue = []
    get_flattened_queue(d, 'Main', flattened_queue)
    
    print(flattened_queue)
    
    {'Main': ['Tammy', 'Elisha', 'Julius'],
     'Elisha': ['Kenneth', 'Nicole'],
     'Nicole': ['Epsi95']}
    
    
    ['Tammy', 'Elisha', 'Kenneth', 'Nicole', 'Epsi95', 'Julius']