'Find item in list of dicts

I have a list of dictionary something like this:

list = [
   {
      "ENT_AUT":[
         "2018-11-27"
      ]
   },
   {
      "ENT_NAT_REF_COD":"C87193"
   },
   {
      "ENT_NAM":"MONEYBASE LIMITED"
   },
   {
      "ENT_NAM_COM":"MONEYBASE LIMITED"
   },
   {
      "ENT_ADD":"Ewropa Business Centre, Triq Dun Karm"
   },
   {
      "ENT_TOW_CIT_RES":"Birkirkara"
   },
   {
      "ENT_POS_COD":"BKR 9034"
   },
   {
      "ENT_COU_RES":"MT"
   }
]

Here every dictionary will always contain only one key value pair. Now I need to know the value of ENT_NAM, ENT_AUT and etc all fields.

I tried something like this:

ENT_NAM = (list[2].values())[0]
print('ENT_NAM = ', ENT_NAM)

It works perfectly for this list but my problem is that the 'ENT_NAM' containing dictionary will not always be on the 2nd index of the list. How can I generalize this solution so that even if the order of the dictionary under the list changes, I always find a perfect solution?



Solution 1:[1]

What you are describing is a search problem. Here the naive solution is probably fine:

def get_prop(dicts, k):
    return next(x[k] for x in dicts if k in x)

get_prop(l, "ENT_NAM")

Incidentally, don't call your variable list: it shadows a builtin.

If you need to use this data more than about 3 times I would just reduce it to a dict:

def flatten(dicts):
    iterdicts = iter(dicts)
    start = next(iterdicts)
    for d in iterdicts:
        start.update(d)
    return start


one_dict = flatten(list_of_dicts)
one_dict["ENT_NAM"]

(There are plenty of other ways to flatten a list of dicts, I just currently think the use of iter() to get a consumable list is neat.)

Solution 2:[2]

As jasonharper said in the comments, if it is possible, the data should be formulated as a single dictionary.

If this cannot happen, you can retrieve the value of ENT_NAM using:

print(list(filter(lambda elem: "ENT_NAM" in elem.keys(), my_list))[0]["ENT_NAM"])

Returns:

MONEYBASE LIMITED

Note: list has been renamed to my_list since list is a reserved Python keyword

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 2e0byo
Solution 2 ChrisOram