【问题标题】:Filtering results from lists Python从列表中过滤结果 Python
【发布时间】:2019-08-13 09:14:15
【问题描述】:

我一直试图在网上找到答案,但没有任何结果。 我正在尝试创建一个系统,用户可以在其中搜索列表并返回他们的科目和成绩,并使用过滤器仅显示一个领域的科目(例如信息科学)并过滤科目的级别(如果它是100lvl、200lvl 或 300lvl)我尝试过使用 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 [])))

这些是我的列表(转换为字典才能使用)

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)

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

我的问题是 Sub_string dosent 可以正常工作以满足我的需要,因为我需要能够允许用户选择一个区域(例如 INFO)和一个特定级别(级别 200),然后打印出所有200 级的 INFO 科目。 但是 sub_string 只检查字符串是否包含在列表中并打印出来。 有没有人有更好的解决方案? 希望这是有道理的 谢谢!

【问题讨论】:

  • 请不要将预期的输出作为图像发布。图片不能被复制/粘贴、搜索、蚀刻。

标签: python dictionary search filter


【解决方案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”。)

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2017-06-25
    • 2012-09-15
    • 2013-07-04
    • 2015-05-26
    • 2012-06-18
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多