Python 如何循环字典中的值以查看它们是否曾经显示为键

Python 如何循环字典中的值以查看它们是否曾经显示为键,python,python-3.x,Python,Python 3.x,我有以下词典(即,my_dict)。基本上,每个键都是一个病人,该键的值是他们接触过的人。我需要的人只出现在价值观中,而不出现在关键点上Philip和Sarai是唯一显示为值而非键的名称 这是我迄今为止尝试过的代码。如何更改它以有效地循环遍历这些值以确定它们是否曾经显示为键 my_dict = {'Bob': ['Paul', 'Mark', 'Carol', 'Leanne', 'Will'], 'Carol': ['Mark', 'Leanne'],

我有以下词典(即,
my_dict
)。基本上,每个
都是一个病人,该键的
是他们接触过的人。我需要的人只出现在价值观中,而不出现在关键点上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)

您可以以一种相当直截了当、易读且高效的方式做您想做的事情,如下所示。我只设置了
a
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