Как проверить, является ли первый элемент каждого кортежа внутри списка ключом словаря?

#python

#python

Вопрос:

Например, если есть словарь 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?

Ответ №1:

Чтобы проверить, является ли объект ключом в a dict , вы можете вызвать dict.keys() , который вернет a list всех ключей в dict .

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
 

Ответ №2:

Вы можете перебирать список, проверяя первый элемент каждого кортежа. Затем проверьте, является ли это значение ключом:

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

Использование student_gpa.keys() возвращает объект просмотра ключей в student_gpa . Объект представления является итерируемым. Вот хорошая статья, объясняющая .keys() .

Ответ №3:

Или вы могли бы попробовать использовать zip , и попробуйте использовать генератор с all , как показано ниже:

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

Выходной сигнал:

 False
 

Ответ @PacketLoss тоже хорош:

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

Выходной сигнал:

 False
 

Ответ №4:

Вы можете сделать это с помощью цикла.

 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
 

Ответ №5:

Вот то, что сработало для меня

 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)
 

Выходной сигнал:

 a
c
 

Чтобы проверить, все ли первые элементы списка кортежей являются ключевыми в словаре

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

Вывод:

 True
 

Чтобы проверить, все ли ключи of dic присутствуют в списке кортежей и наоборот

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

Вывод:

 True
 

Ответ №6:

Вы можете сделать это, используя понимание списка.

 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)
 

Ответ №7:

Я не понимаю, почему некоторые ответы настолько привязаны к использованию однострочного кода. ИМХО, приведенное ниже простое и понятное, особенно для новичка.

 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