У меня есть следующий словарь (т.е. my_dict
). По сути, каждый key
— больной человек, а values
для этого ключа — это люди, с которыми он контактировал. Мне нужны люди, которые встречаются только в значениях и никогда в ключах. Philip и Sarai — единственные имена, которые появляются как значения, но не как ключи.
Это код, который я пробовал до сих пор. Как я могу изменить его, чтобы эффективно перебирать значения, чтобы определить, появляются ли они когда-либо в качестве ключа?
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)
Вы можете делать то, что хотите, довольно прямолинейно, читабельно и эффективно, как показано ниже. Я сделал only_values
set
, чтобы предотвратить дублирование, как вы просили в комментарии.
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'}
Ранее уже было несколько хороших сообщений для ответа на этот вопрос. Здесь я просто представил более пошаговое решение этой проблемы:
patients = my_dict # more descriptive variable
vals = list(patients.values())
uniq_patients = set(sum(vals, []))
print(uniq_patients)
for person in uniq_patients:
if person not in patients: print(person)
Output:
{'Carol', 'Leanne', 'Paul', 'Philip', 'Zach', 'Sarai', 'Will', 'Mark'}
Philip
Sarai