Python 3 - Как обновить словарь, чтобы иметь несколько значений в одном ключе? - PullRequest
0 голосов
/ 18 октября 2018
employeenum = int(input("How many employees? "))
employee ={}
namelist = []
salarylist = []
jobname = []
profile = []
for i in range (0,employeenum):
    job1 = input("Please enter the job's name here: ").lower()
    name1 = input("Please enter the employee's name here: ")
    salary1 = int(input("Please enter the employee's salary here: "))
    jobname.append(job1)
    print(jobname)
    namelist.append(name1)
    salarylist.append(salary1)
    profile.append([{'Name': namelist[i], 'Salary': salarylist[i]}])
    employee.update({jobname[i]: profile[i]})
    employee[jobname[i]].append(profile[i])
    print(employee)
    print(profile)
print(employee)
# {'Programmer': [{'Name': 'Tim', 'Salary': 65000}, {'Name': 'Sally', 'Salary': 50500}], 'Part Time Manager': [{'Name': 'Bob', 'Salary': 17500}]}

Привет всем, у меня проблема с моим кодом, так как я пытаюсь напечатать словарь, в котором будет указано имя рабочего работника, а значения будут его именем и зарплатой (желаемым выводом являетсяпоследняя строка комментария в коде выше).Я сталкиваюсь с проблемой, при которой, если два или более человека имеют одинаковую работу, он перезапишет профиль предыдущего человека.Например, если Джон и Ник обе являются медсестрами, будет отображаться только профиль Ника, поскольку он был последним пользователем.Заранее спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Попробуйте следующее или вы можете посмотреть на defaultdict:

employeenum = int(input("How many employees? "))
employee ={}

for i in range (0, employeenum):

    job1 = input("Please enter the job's name here: ").lower()
    name1 = input("Please enter the employee's name here: ")
    salary1 = int(input("Please enter the employee's salary here: "))

    new_entry = {"Name": name1, "Salary": salary1}
    if job1 in employee:
        employee[job1].append(new_entry)
    else:
        employee[job1] = [new_entry]
0 голосов
/ 18 октября 2018

Краткий ответ: словарь может возвращать только один объект, но этот объект может быть массивом.

  • Установить словарь для возврата списка записей о сотрудниках.Вы можете сделать это, используя комментарий мяу выше.
  • Найдите что-то уникальное для хранения и возврата, например, номер сотрудника или идентификатор работы.У вас может быть один словарь записей о сотрудниках, который просматривается по номеру, и ваш текущий словарь требует поиска всех сотрудников с этим идентификатором работы.То есть значение первого словаря может быть списком ключей для поиска во втором словаре.
  • Точный ответ зависит от того, что вы пытаетесь сделать.Вы должны решить, могут ли над заголовком, таким как «Программист», работать над этим два разных человека из «Джона Смита».Если это инструмент сравнения заработной платы, у Джона может быть две неполный рабочий день с двумя зарплатами, но вы хотите включить его докторскую степень по английской литературе в одном месте.

Чтобы выяснить, как правильно структурировать данные,около половины ежедневной работы профессиональных программистов.Не сдавайся!

0 голосов
/ 18 октября 2018

Я бы сделал это так:

employee = dict()
for i in range(int(input("How Many Employees?"))):
    title = input("Please enter the job's name here: ").lower()
    data = {'Name': input("Please enter the employee's name here: "),
            'Salary': int(input("Please enter the employee's salary here: "))}
    try:
        employee[title].append(data)
    except KeyError:
        employee[title] = [data]
    print(title + ": " + str(data))
print(employee)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...