Я пытаюсь определить лучший способ поиска значений ключей моего словаря.

Я не могу найти функцию, которая позволит мне искать конкретные строки в списке списков. Я пытаюсь заставить программу отображать семестры, что был взят определенный тип класса.

То есть введите «ENGR» и верните, чтобы оно отображалось в «fall14», «fall15» и «spring16».

Может ли кто-нибудь указать мне правильное направление относительно извлечения данных из списка в списке? Я думаю, что мне может понадобиться изменить структуру моих ключей.

Classes = dict()
Classes["FALL14"] = ("ENGR","156","01",'Engineering 3'),("ENGR","156","01",'Engineering 4'),("SCI","156","01",'Chemistry 1'),("ENGL","156","01",'Writing 1')
Classes['SPRING15'] =("ENGL","156","01",'Writing 2'),("MATH","156","01",'Calculus 1'),("MATH","156","01",'Calculus 2'),("MATH","156","01",'Calculus 3')
Classes['FALL15'] =("MATH","156","01",'Differential Equations'),("ENGR","156","01",'Solid Works'),("ENGR","156","01",'MATLAB'),("ENGR","156","01",'Dynamics')
Classes['SPRING16'] = ("ENGR","156","01",'Statics'),("ART","156","01",'Drawing 1'),("ENGR","156","01",'Fluid Dynamics'),("ENGR","156","01",'Thermodynamics 1')


for semester, information in Classes.items():   #Prints semesters that a class type was taken.
    if information ==  "ENGR":
        print(semester)
0
alienmode 13 Янв 2017 в 01:52

3 ответа

Лучший ответ

Предполагая, что строка, которую вы хотите сравнить, всегда будет иметь нулевой индекс вашего вложенного кортежа, вы можете сопоставить содержимое, используя any() вроде:

my_str = "ENGR"

#                             v  as per PEP naming convention, it should 
#                             v  start with lower-case
for semester, informations in Classes.items():
    if any(item[0]==my_str for item in informations):
        #       ^  check element at 0th index of each sub-tuple 
        #          for the match with `my_str`
        print(semester)  # OR, print(semester.lower()) to print the lower cased
                         # string as mentioned in desired result

Который напечатает:

FALL14
FALL15
SPRING16
0
Moinuddin Quadri 12 Янв 2017 в 23:04

Дайте это попробовать. Вы должны продолжать углубляться в свои структуры данных.

Classes = dict()
Classes["FALL14"] = ("ENGR","156","01",'Engineering 3'),("ENGR","156","01",'Engineering 4'),("SCI","156","01",'Chemistry 1'),("ENGL","156","01",'Writing 1')
Classes['SPRING15'] =("ENGL","156","01",'Writing 2'),("MATH","156","01",'Calculus 1'),("MATH","156","01",'Calculus 2'),("MATH","156","01",'Calculus 3')
Classes['FALL15'] =("MATH","156","01",'Differential Equations'),("ENGR","156","01",'Solid Works'),("ENGR","156","01",'MATLAB'),("ENGR","156","01",'Dynamics')
Classes['SPRING16'] = ("ENGR","156","01",'Statics'),("ART","156","01",'Drawing 1'),("ENGR","156","01",'Fluid Dynamics'),("ENGR","156","01",'Thermodynamics 1')


for semester, information in Classes.items():   #Prints semesters that a class type was taken.    
    for course_info in Classes[semester]:
        if course_info[0] ==  "ENGR":
            print(semester)
0
terratunaz 12 Янв 2017 в 23:00

Вам нужно пройти еще один уровень вниз. Ваш цикл дает вам список наборов. Затем вам нужно перебрать эти наборы

Classes = dict()
Classes["FALL14"] = ("ENGR","156","01",'Engineering 3'),("ENGR","156","01",'Engineering 4'),("SCI","156","01",'Chemistry 1'),("ENGL","156","01",'Writing 1')
Classes['SPRING15'] =("ENGL","156","01",'Writing 2'),("MATH","156","01",'Calculus 1'),("MATH","156","01",'Calculus 2'),("MATH","156","01",'Calculus 3')
Classes['FALL15'] =("MATH","156","01",'Differential Equations'),("ENGR","156","01",'Solid Works'),("ENGR","156","01",'MATLAB'),("ENGR","156","01",'Dynamics')
Classes['SPRING16'] = ("ENGR","156","01",'Statics'),("ART","156","01",'Drawing 1'),("ENGR","156","01",'Fluid Dynamics'),("ENGR","156","01",'Thermodynamics 1')

for semester, information in Classes.items():   
    for classes in information:
         if 'ENGR' in classes:
                 print classes
0
badger0053 12 Янв 2017 в 22:58