Я ищу, чтобы изменить значения в списке словарей. - PullRequest
1 голос
/ 27 октября 2019

Значения, которые нужно изменить, не являются одним и тем же ключом: комбинации значений, в которых будет производиться поиск, указывают, # что этот словарь должен быть изменен. Вот код, который я попробовал:

employees = [
      {
        "first_name": "Bill", 
        "last_name": "Lumbergh",
        "job_title": "Vice President",
        "hire_date": 1985,
        "performance_review": "excellent"
      }, {
        "first_name": "Michael", 
        "last_name": "Bolton",
        "job_title": "Programmer",
        "hire_date": 1995,
        "performance_review": "poor"
      }, {
        "first_name": "Peter", 
        "last_name": "Gibbons",
        "job_title": "Programmer",
        "hire_date": 1989,
        "performance_review": "poor"
      }, {
        "first_name": "Samir", 
        "last_name": "Nagheenanajar",
        "job_title": "Programmer",
        "hire_date": 1974,
        "performance_review": "fair"
      }, {
        "first_name": "Milton", 
        "last_name": "Waddams",
        "job_title": "Collator",
        "hire_date": 1974,
        "performance_review": "does he even work here?"
      }, {
        "first_name": "Bob", 
        "last_name": "Porter",
        "job_title": "Consultant",
        "hire_date": 1999,
        "performance_review": "excellent"
      }, {
        "first_name": "Bob", 
        "last_name": "Slydell",
        "job_title": "Consultant",
        "hire_date": 1999,
        "performance_review": "excellent"
      }
    ]

employees[0]['review_finished'] = 'yes'
employees[1]['review_finished'] = 'yes'
employees[2]['review_finished'] = 'yes'
employees[3]['review_finished'] = 'yes'
employees[4]['review_finished'] = 'yes'
employees[5]['review_finished'] = 'yes'
employees[6]['review_finished'] = 'yes'

def update_file(employees):
    for dict in employees:
        for k, v in dict.items():
            if [k]['first_name'] == 'Bill':
                dict [v]['performance_review'] = 'poor'
            elif [k]['job_title'] == 'Consultant':
                dict[v]['performance_review'] = 'poor'
            else:
                dict[v]['performance_review'] = 'excellent'



update_file(employees)

Это ошибка, которая появляется: Traceback (последний вызов был последним): файл "C: \ Users \ brend \ Documents \ GA.py \ problem1.py", строка 70, в файле update_file (сотрудники)" C: \ Users \ brend \ Documents \ GA.py \ problem1.py ", строка 60, в файле update_file, если [k] ['first_name'] == 'Bill':Ошибка типа: индексы списка должны быть целыми числами или частями, а не str

1 Ответ

0 голосов
/ 27 октября 2019

В вашем коде переменная dict - это словарь, а k,v - это кортежи, где k - это имя ключа, а v - это значение. Когда вы набираете [k]['first_name'], вы пытаетесь проиндексировать список (который [k]), используя строку (['first_name']), поэтому вы получаете сообщение об ошибке. То, что вы хотите сделать, можно переписать как

def update_file(employees):
    for dict in employees:
        if dict['first_name'] == 'Bill':
           dict['performance_review'] = 'poor'
        elif dict['job_title'] == 'Consultant':
           dict['performance_review'] = 'poor'
        else:
           dict['performance_review'] = 'excellent'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...