How to search a dictionary for a value then delete that value

Question:

I have a dictionary where the values are lists. I want to search these for a specific value. right now it returns if the value is in each list individually but i just want overall then it deletes

Here’s what it returns right now:

marie true 
marie false 
marie false 
tom false 
tom true 
tom false 
jane false 
jane false 
jane false 

Here is what I want:

marie true 
tom true 
jane false

Here is the code:

dictionary = {'nyu': ['marie', 'taylor', 'jim'], 
              'msu': ['tom', 'josh'], 
              ' csu': ['tyler', 'mark', 'john']} 
              #made in different method in same class


class example:
    def get_names(self, name_list):
        for i in range(len(name_list)):
            for j in dictionary:
                if name_list[i] in dictionary[j]:
                    print('true')
                    dictionary[j].remove(name_list[i])
                else:
                    print('false')

def main():
    name_list = ['marie', 'tom', 'jane']
    e = example()
    e.get_names(name_list)

main()
Asked By: Squilliam

||

Answers:

You need to wait the iteration on all dict values before being able to yes yes or no

dictionary = {'nyu': ['marie', 'taylor', 'jim'],
              'msu': ['tom', 'josh'],
              ' csu': ['tyler', 'mark', 'john']}

def get_names(names):
    for name in names:
        name_found = False
        for dict_names in dictionary.values():
            if name in dict_names:
                name_found = True
                break
        print(name, name_found)

name_list = ['marie', 'tom', 'jane']
get_names(name_list)
Answered By: azro

You must not remove from something you are iterating. NEVER!
But you may iterate a copy while deleting from the original, as in:

dictionary = {'nyu': ['marie', 'taylor', 'jim'], 
              'msu': ['tom', 'josh'], 
              ' csu': ['tyler', 'mark', 'john']} 
#made in different method in same class

class example:
    def remove_names( self, name_list):
        dic = dictionary.copy()
        for name in name_list:
            for k in dic:
                if name in dic[k]:
                    dictionary[k].remove( name)

def main():
    name_list = ['marie', 'tom', 'jane']
    e = example()
    e.remove_names(name_list)
    print(dictionary)

main()

It will print:
{‘nyu’: [‘taylor’, ‘jim’], ‘msu’: [‘josh’], ‘ csu’: [‘tyler’, ‘mark’, ‘john’]}

Answered By: user3435121
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.