Python идентифицирует индекс в словаре с помощью массива

#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