Nano Hash - криптовалюты, майнинг, программирование

Python: поиск словарей в списке, у которых есть некоторые ключи другого списка словарей

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

Вот пример:

students = [{'123': [{'course1': 2}, {'course2': 2}]}, 
            {'124': [{'course1': 3}, {'course2': 4}]}, 
            {'125': [{'course1': 24}, {'course2': 12}]}, 
            {'126': [{'course1': 2}, {'course2': 24}]}, ...]

finals = [{'student_number':'123', 'exam':'passed',...},
          {'student_number':'124', 'exam':'ungraded',...},
          {'student_number':'125', 'exam':'failed',...}, ...]

Поиск номеров student_numbers в финалах, которые существуют у студентов, и разделение их на основе ключа «экзамен»:

# Students who passed exam, 'exam' = 'passed'
passed_students = ['123', ...]

# Other Students
other_students = ['124', '125', ...]
23.04.2017

Ответы:


1

Я не слишком уверен, что ваши данные в лучшем формате, но с учетом того, что у вас есть, следующий код будет работать:

students = [{'123': [{'course1': 2}, {'course2': 2}]},
            {'124': [{'course1': 3}, {'course2': 4}]},
            {'125': [{'course1': 24}, {'course2': 12}]},
            {'126': [{'course1': 2}, {'course2': 24}]}]

finals = [{'student_number':'123', 'exam':'passed'},
          {'student_number':'124', 'exam':'ungraded'},
          {'student_number':'125', 'exam':'failed'}]

studentIDs = [i.keys()[0] for i in students]

passed_students=[]
other_students=[]
for row in finals:
    snum = row['student_number']
    status = row['exam']
    if status=='passed' and snum in studentIDs:
        passed_students.append(snum)
    elif status!='passed' and snum in studentIDs:
        other_students.append(snum)
    else:
        print 'Student ID {0} not found in list.'.format(snum)
23.04.2017

2

Небольшое упражнение для понимания списков:

students = [{'123': [{'course1': 2}, {'course2': 2}]},
            {'124': [{'course1': 3}, {'course2': 4}]},
            {'125': [{'course1': 24}, {'course2': 12}]},
            {'126': [{'course1': 2}, {'course2': 24}]}]

finals = [{'student_number':'123', 'exam':'passed',},
          {'student_number':'124', 'exam':'ungraded',},
          {'student_number':'125', 'exam':'failed',},]

# Extract student id numbers.
student_ids = set(
    student_data.keys()[0]
    for student_data in students)

# Restrict finals to the students that exist in students.
students_with_finals = [
    final
    for final in finals
    if final['student_number'] in student_ids]

passed_students = [
    final['student_number']
    for final in students_with_finals
    if final['exam'] == 'passed']

other_students = [
    final['student_number']
    for final in students_with_finals
    if final['exam'] != 'passed']

print('Passed students: {}'.format(passed_students))
print('Other students: {}'.format(other_students))

Результат:

Passed students: ['123']
Other students: ['124', '125']

Похоже, что структуры данных можно упростить, используя словари с идентификаторами студентов в качестве ключей:

students = {
    '123': [{'course1': 2}, {'course2': 2}],
    '124': [{'course1': 3}, {'course2': 4}],
    '125': [{'course1': 24}, {'course2': 12}],
    '126': [{'course1': 2}, {'course2': 24}],
}

finals = {
    '123': {'exam':'passed', 'points': 100},
    '124': {'exam':'ungraded'},
    '125': {'exam':'failed'},
}
23.04.2017
  • Спасибо, Хелко, твое решение лучше, чем то, что я написал, 3 вложенных цикла for + 2 вложенных цикла if. 23.04.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..