Создать неуникальный python словарь - PullRequest
1 голос
/ 19 апреля 2020

Я создаю программу, в которой пользователь будет вводить свой счет и нагрузку на единицу для этого курса, а затем сохранять их в словаре, например, {Score: unit_load}. Затем я проведу l oop по словарю и умножу каждый результат на единицу нагрузки. Моя проблема заключается в следующем: словари всегда возвращают уникальный ключ в отличие от списков. У кого-то может быть одинаковый балл в более чем одном курсе, но мой словарь наверняка удалит любое повторение баллов из последовательности. Мне нужна помощь о том, как создать словарь не уникальным способом. Я также попытался создать два списка и сохранить оценку в одном списке и загрузку единицы в другом ... Моя проблема заключается в том, как выполнить l oop через два списка и умножить попарные элементы. Я пробовал что-то вроде

dic = {}
last_list = []
while True:
    score = input("Enter score 
    and press -1 when you 
    finish entering your score: ")
    if score=='-1':
       break
    unit_load =int(input("Enter 
    unitt load"))
    dic[score]=unit_load
for score, unit_load in dic.items():
    multiple = score*unit_load
    last_list.append(multiple)
print(last_list)

В возвращаемом словаре всегда отбрасывается любой подобный ключ (оценка), так как некоторые люди могут иметь одинаковые оценки по нескольким предметам. Может кто-нибудь показать мне, как преобразовать словарь так, чтобы он всегда возвращал все результаты, как в списке, не отбрасывая аналогичные результаты, чтобы сделать себя уникальным?

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Как вы заметили, это не очень хорошее применение для словарей. Рассмотрите возможность использования списка кортежей:

items = []
while True:
  ...
  items.append((score, unit_load))
for score, unit_load in items:
  ...

И так как вы также попробовали подход с двумя списками, вот как это будет выглядеть:

scores = []
unit_loads = []
while True:
  ...
  scores.append(score)
  unit_loads.append(unit_load)
for score, unit_load in zip(scores, unit_loads):
  ...

Функция zip принимает два (или далее) перечисляет (или итерирует) и объединяет элементы в один итерируемый набор кортежей.

0 голосов
/ 19 апреля 2020

Я не думаю, что вам нужно использовать словари, для этого случая вы можете просто следовать подходу с двумя массивами, например:

import numpy as np

course_len = int(input('Enter total no. of courses'))

#initialize np arrays

score = np.ndarray(course_len, int)
unit_load = np.ndarray(course_len, int)

dic = {}

#fill in you arrays with a loop

while j<course_len:
    score[j] = input('enter score')
    j +=1 



while k<course_len:
    unit_load[k] = input('enter unitload')
    k +=1 

#fill in the product
for i in range(course_len):

    dic[i] = score[i]*unit_load[i]

    i +=1

print(dic)

окончательный словарь будет содержать конечный продукт оценки и единичную загрузку в хороший индексированный способ. Надеюсь, это просто и понятно.

...