繁体   English   中英

如何检查列表中每个元组的第一个元素是否是字典的键?

[英]How to check if the first element of each tuple inside a list is a key of a dictionary?

例如,如果有一个字典 student_gpa,其中:

student_gpa = {'Alex': 3.00, 
               'John': 3.50,
               'Jennifer': 3.75}

和一个元组student_age列表,其中:

student_age = [('Mike', 14),
              ('Alex', 13),
              ('John', 15)]

如何检查“Mike”、“Alex”和“John”是否都是字典 student_gpa 中的键?

要检查 object 是否是dict中的键,您可以调用dict.keys() ,它将返回dict中所有键的list

name in dict.keys()

但是,如果您只想检查所有学生是否存在于dict中,您可以使用all()和循环来确定是否在keys列表中找到所有名称。

>>> all(student in student_gpa.keys() for student, age in student_age)
#False

>>> student_gpa['Mike'] = 1.0
>>> all(student in student_gpa.keys() for student, age in student_age)
#True

您可以遍历列表,检查每个元组的第一个元素。 然后检查该值是否是键:

for i in student_age:
    if i[0] in student_gpa.keys():
        print("yes")`

使用student_gpa.keys()返回student_gpa中键的视图 object。 视图 object 是可迭代的。是一篇很好的文章,解释.keys()

或者您可以尝试使用zip ,并尝试使用带有all的生成器,如下所示:

print(all(i in student_gpa.keys() for i in list(zip(*student_age))[0])

Output:

False

@PacketLoss 的回答也很好:

print(all(x in student_gpa.keys() for x, y in student_age))

Output:

False

这是对我有用的东西

tuple_list = [("a", "b"),("c", "d")]
first_tuple_elements = [a_tuple[0] for a_tuple in tuple_list]#Getting all tupples first element
student_gpa = {'a': 3.00, 
               'c': 3.50}
for key in first_tuple_elements:
    if key in list(student_gpa.keys()):
        print(key)

Output:

a
c

检查元组列表的所有第一个元素是否都是字典中的键

print(first_tuple_elements in list(student_gpa.keys()))

Output:

True

检查 dic 的所有键是否都存在于元组列表中,反之亦然

print(list(student_gpa.keys())==first_tuple_elements)

Output:

True

你可以用循环来做到这一点。

student_gpa = {'Alex': 3.00,
                   'John': 3.50,
                   'Jennifer': 3.75}
student_age = [('Mike', 14),
                  ('Alex', 13),
                  ('John', 15)]
student_gpa_keys = list(student_gpa.keys())
list_keys = [item[0] for item in student_age]
    
for ele in list_keys:
    if ele in student_gpa_keys:
        print(ele)

结果:

Alex
John

我不明白为什么有些答案如此固定使用单行代码。 恕我直言,以下内容简洁易懂,尤其是对于初学者。

for student, age in student_age:
    if student in student_gpa: # no need to use student_gpa.keys() to check if a key exists
        print(student, 'is in the dictionary')
        # Do something
    else:
        print(student, 'is not in the dictionary')
        # Do something else

您可以使用列表推导来做到这一点。

student_gpa = {'Alex': 3.00, 
               'John': 3.50,
               'Jennifer': 3.75}
student_age = [('Mike', 14),
              ('Alex', 13),
              ('John', 15)]

students = [std for std, _ in student_age if std in student_gpa]

print (students)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM