从列表中过滤结果Python

时间:2019-03-22 11:30:41

标签: python dictionary search filter

我一直试图在网上找到答案,但没有任何结果。 我正在尝试创建一个系统,用户可以在该系统中搜索列表并返回其主题和成绩,并使用过滤器仅显示某个区域的主题(例如信息科学),还可以过滤主题的级别(如果它是100lvl,200lvl或300lvl)我已经尝试过使用Sub_string,但无法正常工作。 所以到目前为止,我拥有的视图代码(带有sub_string)是这样的:

def finn():
    global Karakterer
    global Emner
    print("Velg fag og/eller emnenivå (<enter> for alle)")
    Fag = input("-Fag: ")
    for sub_string in Emner:
        if str(Fag) in sub_string:
         print(*([sub_string] + ([Karakterer[sub_string]] if sub_string in Karakterer else [])))

这些是我的列表(已转换为Dicts以使其正常工作)

Emner = ["INFO100","INFO104","INFO110","INFO150","INFO125", "RELV102"]
FagKoder = [["Informasjonsvitenskap","INF"],["Kognitiv vitenskap","Kog"], 
["Religionsvitenskap","REL"],["DigitalKultur","DIK"],["Økonomi","ECO"]]
Karakterer=[["INFO100","C"],["INFO104","B"],["INFO110","E"], ["RELV102","A"]]
Karakterer=dict(Karakterer)
FagKoder = dict(FagKoder)

这是现在打印出来的方式,也是我需要打印的方式:

enter image description here

我的问题是Sub_string剂量可以正确地满足我的需求,因为我需要能够允许用户选择一个区域(例如INFO)以及一个特殊级别(级别200),然后打印出所有内容INFO科目达到200级。 但是sub_string只会乱七八糟地检查列表中是否包含该字符串并进行打印。 有谁有更好的解决方案? 希望有道理 谢谢!

1 个答案:

答案 0 :(得分:1)

一个最小的解决方法可能是从末尾分割数字并分别进行比较。

def finn():
    global Karakterer  # ugh
    global Emner       # ugh
    want_subj = input("Velg fag (<enter> for alle): ")
    want_level = input("Velg emnenivå (<enter> for alle): ")
    try:
        want_level = int(want_level)
    except ValueError:
        want_level = None
    for subject in Emner:
        # no need for str(Fag); input by definition returns a string
        if want_subj in subject:
          if not want_level or int(subject[-3:]) == want_level:
            print(*([sub_string] + ([Karakterer[sub_string]] if sub_string in Karakterer else [])))

更好的解决方案可能是将课程及其级别存储为单独的项目,这样您就不必在需要时解析编号。 (顺便说一句,当您可以轻松地直接定义dict时,不应该分配给列表,然后重铸为dict。)

Emner = [("INFO",100),("INFO",104),("INFO",110),("INFO",150),("INFO",125, ("RELV",102)]
FagKoder = {
    "INF": "Informasjonsvitenskap",
    "Kog": "Kognitiv vitenskap",
    "REL": "Religionsvitenskap",
    "DIK": "DigitalKultur"
    "ECO": "Økonomi"
    }

很明显,如何使代码适应这些结构。

(顺便说一句,您在Emner中似乎有“ RELV”,但在FagKoder中却有“ REL”。)