2017-01-12 148 views
0

我想确定搜索字典键值的最佳方法。在字典列表中搜索列表中的字符串

我似乎找不到一个函数,可以让我搜索列表中的特定字符串。我试图让程序显示某个班级类型的学期。

即输入“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

假设你要比较永远是你的嵌套元组的第0个索引处的字符串,你可以搭配使用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

非常感谢。 – alienmode

0

您需要再上一层楼。你的循环给你一个套件的列表。然后您需要遍历这些集合

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

试试这个。你需要继续钻研你的数据结构。

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) 
+2

由于您已经在使用'dict.items()'进行迭代,所以您应该用'information'替换'Classes [semester]'' –