-1

I have a list of nested dicts, and would like to find the dict which contains a certain value then use that dict to find the values of the other keys in the dict. For example, I want to search the list for the MP_REFERENCE '123456', so that I can save the dict containing this string and find other values within it (eg. my_dict["OUTCOME_CODE"]["value"])

watermelon123
  • 357
  • 2
  • 3
  • 12
  • 1
    Duplicate of [Python list of dictionaries search](https://stackoverflow.com/questions/8653516/python-list-of-dictionaries-search) – mustaccio Aug 06 '20 at 17:27

2 Answers2

1
In [64]: LIST = [
    ...:             {
    ...:                 "RESPONSE_TYPE_CODE": {"value": "RNAGE"},
    ...:                 "OUTCOME_CODE": {"value": "ACCPT"},
    ...:                 "MP_REFERENCE": {"value": 338451},
    ...:                 "TRANSACTION_REFERENCE": {"value": "213527"},
    ...:                 "TRANSACTION_TYPE_CODE": {"value": "APPNT"},
    ...:                 "TRANSACTION_STATUS_CODE": {"value": "ACCPT"},
    ...:             },
    ...:             {
    ...:                 "RESPONSE_TYPE_CODE": {"value": "RNAGE"},
    ...:                 "OUTCOME_CODE": {"value": "ACCPT"},
    ...:                 "MP_REFERENCE": {"value": 519505},
    ...:                 "TRANSACTION_REFERENCE": {"value": "123456"},
    ...:                 "TRANSACTION_TYPE_CODE": {"value": "APPNT"},
    ...:                 "TRANSACTION_STATUS_CODE": {"value": "ACCPT"},
    ...:             },
    ...:             {
    ...:                 "RESPONSE_TYPE_CODE": {"value": "RNAGE"},
    ...:                 "OUTCOME_CODE": {"value": "REJCT"},
    ...:                 "MP_REFERENCE": {"value": 123456},
    ...:                 "TRANSACTION_REFERENCE": {"value": "475582"},
    ...:                 "TRANSACTION_TYPE_CODE": {"value": "DEAPP"},
    ...:                 "TRANSACTION_STATUS_CODE": {"value": "ACCPT"},
    ...:             }
    ...:  ]

In [63]: [d for d in LIST if d["MP_REFERENCE"]["value"] == 123456]
Out[63]:
[{'RESPONSE_TYPE_CODE': {'value': 'RNAGE'},
  'OUTCOME_CODE': {'value': 'REJCT'},
  'MP_REFERENCE': {'value': 123456},
  'TRANSACTION_REFERENCE': {'value': '475582'},
  'TRANSACTION_TYPE_CODE': {'value': 'DEAPP'},
  'TRANSACTION_STATUS_CODE': {'value': 'ACCPT'}}]
bigbounty
  • 16,526
  • 5
  • 37
  • 65
1

Here is some code that iterates through "LIST" and saves the dict with the specifications you asked for into a variable called correct_dict. Note that I have renamed "LIST" to lst for simplicity.

lst = [
            {
                "RESPONSE_TYPE_CODE": {"value": "RNAGE"},
                "OUTCOME_CODE": {"value": "ACCPT"},
                "MP_REFERENCE": {"value": 338451},
                "TRANSACTION_REFERENCE": {"value": "213527"},
                "TRANSACTION_TYPE_CODE": {"value": "APPNT"},
                "TRANSACTION_STATUS_CODE": {"value": "ACCPT"},
            },
            {
                "RESPONSE_TYPE_CODE": {"value": "RNAGE"},
                "OUTCOME_CODE": {"value": "ACCPT"},
                "MP_REFERENCE": {"value": 519505},
                "TRANSACTION_REFERENCE": {"value": "123456"},
                "TRANSACTION_TYPE_CODE": {"value": "APPNT"},
                "TRANSACTION_STATUS_CODE": {"value": "ACCPT"},
            },
            {
                "RESPONSE_TYPE_CODE": {"value": "RNAGE"},
                "OUTCOME_CODE": {"value": "REJCT"},
                "MP_REFERENCE": {"value": 123456},
                "TRANSACTION_REFERENCE": {"value": "475582"},
                "TRANSACTION_TYPE_CODE": {"value": "DEAPP"},
                "TRANSACTION_STATUS_CODE": {"value": "ACCPT"},
            }]

correct_dict = {}
for dic in lst:
    if dic["MP_REFERENCE"]["value"] == "123456":
        correct_dict = dic
M-Chen-3
  • 2,036
  • 5
  • 13
  • 34