如何检查字典中的相似字符串?

时间:2021-02-01 17:50:45

标签: python algorithm sorting dictionary

我想得到这些学生中最受欢迎的科目,但我不知道如何以至少一种优雅的方式解决这个问题。我不知道如何检查字典。它应该返回带有最常见答案的主题。

student = {
    1: {"name": "A", "grade": 10, "subject": "sports"},
    2: {"name": "B", "grade": 12, "subject": "maths"},
    3: {"name": "C", "grade": 8, "subject": "german"},
    4: {"name": "D", "grade": 11, "subject": "maths"},
    5: {"name": "E", "grade": 6, "subject": "art"},
    6: {"name": "F", "grade": 9, "subject": "english"}
}

这是我已经尝试过但不知道如何继续的事情的开始,因为我不知道如何寻找最大的变量:

for key in student:
  if student[key]["subject"] == "sports":
    favorite_sports += 1
  elif student[key]["subject"] == "maths":
    favorite_maths += 1
  elif student[key]["subject"] == "german":
    favorite_german += 1
  elif student[key]["subject"] == "art":
    favorite_art += 1
  elif student[key]["subject"] == "enlgish":
    favorite_english += 1

我不知道如何以一种好的方式寻找最大的变量...

2 个答案:

答案 0 :(得分:1)

您可以使用集合中的 Counter 类:

student = {
    1: {"name": "A", "grade": 10, "subject": "sports"},
    2: {"name": "B", "grade": 12, "subject": "maths"},
    3: {"name": "C", "grade": 8, "subject": "german"},
    4: {"name": "D", "grade": 11, "subject": "maths"},
    5: {"name": "E", "grade": 6, "subject": "art"},
    6: {"name": "F", "grade": 9, "subject": "english"}
}

from collections import Counter
favorites = Counter(d["subject"] for _,d in student.items())

print(favorites)
Counter({'maths': 2, 'sports': 1, 'german': 1, 'art': 1, 'english': 1})

print(favorites.most_common(2))
[('maths', 2), ('sports', 1)]

答案 1 :(得分:0)

您可以通过创建一个包含每个主题在答案中出现的次数的 defaultdict 来解决这个问题。然后使用带有 lambda 比较器的 max 函数获取最流行的主题,以保持其干净。

from collections import defaultdict 

subject_count = defaultdict(lambda: 0)

for ind, student in students.items():
    subject = student['subject']
    subject_count[subject] += 1

print(max(subject_count.items(), key=lambda a: a[1]))