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