Измените словарь на основе значений другого словаря в качестве поиска по одним и тем же ключам в обоих диктах

#python #python-3.x #dictionary

Вопрос:

У меня есть 2 словаря, которые содержат массив объектов списка, содержащих по крайней мере 2 совпадающих ключа. Я пытаюсь обновить значение отдельного ключа в одном словаре на основе значений входящего словаря, сравнивая значения в одних и тех же ключах.

 booksToChange = {
    'books': [
        {'name': 'JOE3', 'currency':'JPY', 'minutesToAction': 6},
        {'name': 'ERIC123', 'currency':'CNY', 'minutesToAction': 8}
    ]
}

allBooks = {
    'books': [
        {'currency': 'USD', 'name': 'JOE3', 'action_time': '2021-09-16T18:30:00.000Z'}, 
        {'currency': 'EUR', 'name': 'MANTIS3', 'action_time': '2021-10-29T13:59:00.000Z'}, 
        {'currency': 'JPY', 'name': 'JOE3', 'action_time': '2021-08-19T17:43:00.000Z'}, 
        {'currency': 'CNY', 'name': 'ERIC123', 'action_time': '2021-09-16T18:30:00.000Z'}, 
        {'currency': 'RUB', 'name': 'ALEX', 'action_time': '2021-09-16T18:30:00.000Z'}, 
        {'currency': 'JPY', 'name': 'JOE35', 'action_time': '2021-08-27T18:27:00.000Z'}, 
        {'currency': 'HKD', 'name': 'MIKE5', 'action_time': '2021-09-16T18:45:00.000Z'}, 
        {'currency': 'ZAR', 'name': 'CHARLIE24', 'action_time': '2021-10-11T19:15:59.164Z'}
    ]
}
 

Входящий dict booksToChange запрашивает изменение значения ключа action_time на «СЕЙЧАС» плюс действие минуты в dict allBooks, если значения ключей «имя» и «валюта» совпадают.
Таким образом, в результате все книги будут:

 allBooks = {
    'books': [
        {'currency': 'USD', 'name': 'JOE3', 'action_time': '2021-09-16T18:30:00.000Z'}, 
        {'currency': 'EUR', 'name': 'MANTIS3', 'action_time': '2021-10-29T13:59:00.000Z'}, 
        {'currency': 'JPY', 'name': 'JOE3', 'action_time': 'UTCTIMENOW   6 minutes'}, 
        {'currency': 'CNY', 'name': 'ERIC123', 'action_time': 'UTCTIMENOW   8 minutes'}, 
        {'currency': 'RUB', 'name': 'ALEX', 'action_time': '2021-09-16T18:30:00.000Z'}, 
        {'currency': 'JPY', 'name': 'JOE35', 'action_time': '2021-08-27T18:27:00.000Z'}, 
        {'currency': 'HKD', 'name': 'MIKE5', 'action_time': '2021-09-16T18:45:00.000Z'}, 
        {'currency': 'ZAR', 'name': 'CHARLIE24', 'action_time': '2021-10-11T19:15:59.164Z'}
    ]
}
 

Я почти уверен, что это неэффективный подход

 for bookItem in allBooks['books']:
        for requestBook in booksToChange['books']:
            if (bookItem ['name'] == requestBook['name'] and bookItem ['currency'] == requestBook['currency']):
                bookItem['action_time'] = NOW   requestBook['minutesToAction']
 

Комментарии:

1. Мне кажется, что этот вопрос больше подходит для того, чтобы его задавали на форуме по обзору кода . Обзор кода-это сайт вопросов и ответов для одноранговых обзоров кода программистов. Пожалуйста, прочтите соответствующее руководство, относящееся к