#python #arrays #dictionary #indexing #key-value
#python #массивы #словарь #индексирование #ключ-значение
Вопрос:
Я хотел бы получить индекс следующей пары ключ-значение:
Key => [CorrectionHistory][Key] Value => 456
{'CorrectionHistory': [{'key': 123, 'CorrectionsAll': [{'CorrChngDesc': 'Discount Line Changed'}, {'CorrChngDesc': 'Commodity Line Changed'}]}, {'key': 456, 'CorrectionsAll': [{'CorrChngDesc': 'AC Added/Modified'}, {'CorrChngDesc': 'CMDY Added/Modified'}]}, {'key': 789, 'CorrectionsAll': [{'CorrChngDesc': 'AC Added/Modified'}]}}
Может кто-нибудь, пожалуйста, пролить некоторый свет на это?
Комментарии:
1. можете ли вы показать нам желаемый результат
Ответ №1:
Я предполагаю, что у вас есть только CorrectionHistory
ключ, поскольку это ваш пример. В моем примере функция, которую я написал, очень проста, просто чтобы доказать, что она выполняет работу, о которой вы упомянули, но ее можно легко обобщить:
a = {
'CorrectionHistory': [
{'key': 123, 'CorrectionsAll': [{'CorrChngDesc': 'Discount Line Changed'}, {'CorrChngDesc': 'Commodity Line Changed'}]},
{'key': 456, 'CorrectionsAll': [{'CorrChngDesc': 'AC Added/Modified'}, {'CorrChngDesc': 'CMDY Added/Modified'}]},
{'key': 789, 'CorrectionsAll': [{'CorrChngDesc': 'AC Added/Modified'}]}
]
}
def get_index_for_key(key):
for index, item in enumerate(a['CorrectionHistory']):
if item['key'] == key:
return index
return None
print(get_index_for_key(456))
Результат: 1
искомый индекс
Пожалуйста, дайте мне знать, если это то, что вы ищете.
Ответ №2:
Также одна строка:
data = {'CorrectionHistory': [{'key': 123, 'CorrectionsAll': [{'CorrChngDesc': 'Discount Line Changed'}, {'CorrChngDesc': 'Commodity Line Changed'}]}, {'key': 456, 'CorrectionsAll': [{'CorrChngDesc': 'AC Added/Modified'}, {'CorrChngDesc': 'CMDY Added/Modified'}]}, {'key': 789, 'CorrectionsAll': [{'CorrChngDesc': 'AC Added/Modified'}]}]}
index = [i for i, x in enumerate(data['CorrectionHistory']) if x['key'] == 456][0]
Вывод:
1