I have the following dictionary (i.e., my_dict
). Basically each key
is a sick person and the values
for that key are the people they have been in contact with. I need the people that occur only in the values and never in the keys. Philip and Sarai are the only names that appear as values but not keys.
This is the code I have tried so far. How can I change it to effectively loop through the values to determine if they ever appear as a key?
my_dict = {'Bob': ['Paul', 'Mark', 'Carol', 'Leanne', 'Will'], 'Carol': ['Mark', 'Leanne'], 'Farley': ['Paul'], 'Leanne': ['Sarai'], 'Larry': ['Carol', 'Mark', 'Leanne', 'Will'], 'Mark': ['Philip', 'Zach'], 'Paul': ['Zach'], 'Will': ['Leanne', 'Mark'], 'Zach': ['Philip']} list = [] for key in my_dict: variable = True for value in my_dict.values(): if key in value: variable = False if variable == True: list.append(value) print(list)
Advertisement
Answer
You can do what you want in a fairly straight-forward, readable, and efficient manner, as shown below. I made only_values
a set
to prevent duplicates as you requested in a comment.
my_dict = {'Bob': ['Paul', 'Mark', 'Carol', 'Leanne', 'Will'], 'Carol': ['Mark', 'Leanne'], 'Farley': ['Paul'], 'Leanne': ['Sarai'], 'Larry': ['Carol', 'Mark', 'Leanne', 'Will'], 'Mark': ['Philip', 'Zach'], 'Paul': ['Zach'], 'Will': ['Leanne', 'Mark'], 'Zach': ['Philip']} only_values = {person for people in my_dict.values() for person in people if person not in my_dict} print(only_values) # -> {'Philip', 'Sarai'}