How to iterate through a list of dictionaries

Viewed 173835

My code is

index = 0
for key in dataList[index]:
    print(dataList[index][key])

Seems to work fine for printing the values of dictionary keys for index = 0. However, I can't figure out how to iterate through an unknown number of dictionaries in dataList.

8 Answers
use=[{'id': 29207858, 'isbn': '1632168146', 'isbn13': '9781632168146', 'ratings_count': 0}]
for dic in use:
    for val,cal in dic.items():
        print(f'{val} is {cal}')
def extract_fullnames_as_string(list_of_dictionaries):
    
return list(map(lambda e : "{} {}".format(e['first'],e['last']),list_of_dictionaries))


names = [{'first': 'Zhibekchach', 'last': 'Myrzaeva'}, {'first': 'Gulbara', 'last': 'Zholdoshova'}]
print(extract_fullnames_as_string(names))

#Well...the shortest way (1 line only) in Python to extract data from the list of dictionaries is using lambda form and map together. 

"""The approach that offers the most flexibility and just seems more dynamically appropriate to me is as follows:"""

Loop thru list in a Function called.....

def extract_fullnames_as_string(list_of_dictionaries):

    result = ([val for dic in list_of_dictionaries for val in 
    dic.values()])

    return ('My Dictionary List is ='result)


    dataList = [{'first': 3, 'last': 4}, {'first': 5, 'last': 7},{'first': 
    15, 'last': 9},{'first': 51, 'last': 71},{'first': 53, 'last': 79}]
    
    print(extract_fullnames_as_string(dataList))

"""This way, the Datalist can be any format of a Dictionary you throw at it, otherwise you can end up dealing with format issues, I found. Try the following and it will still works......."""

    dataList1 = [{'a': 1}, {'b': 3}, {'c': 5}]
    dataList2 = [{'first': 'Zhibekchach', 'last': 'Myrzaeva'}, {'first': 
    'Gulbara', 'last': 'Zholdoshova'}]

    print(extract_fullnames_as_string(dataList1))
    print(extract_fullnames_as_string(dataList2))

Another pythonic solution is using collections module.

Here is an example where I want to generate a dict containing only 'Name' and 'Last Name' values:

from collections import defaultdict

test_dict = [{'Name': 'Maria', 'Last Name': 'Bezerra', 'Age': 31},
             {'Name': 'Ana', 'Last Name': 'Mota', 'Age': 31},
             {'Name': 'Gabi', 'Last Name': 'Santana', 'Age': 31}]

collect = defaultdict(dict)

# at this moment, 'key' becomes every dict of your list of dict
for key in test_dict:
    collect[key['Name']] = key['Last Name']

print(dict(collect))

Output should be:

{'Name': 'Maria', 'Last Name': 'Bezerra'}, {'Name': 'Ana', 'Last Name': 'Mota'}, {'Name': 'Gabi', 'Last Name': 'Santana'}

There are multiple ways to iterate through a list of dictionaries. However, if you are into Pythonic code, consider the following ways, but first, let's use data_list instead of dataList because in Python snake_case is preferred over camelCase.

Way #1: Iterating over a dictionary's keys

# let's assume that data_list is the following dictionary
data_list = [{'Alice': 10}, {'Bob': 7}, {'Charlie': 5}]

for element in data_list:
    for key in element:
        print(key, element[key])

Output

Alice 10
Bob 7
Charlie 5

Explanation:

  • for element in data_list: -> element will be a dictionary in data_list at each iteration, i.e., {'Alice': 10} in the first iteration, {'Bob': 7} in the second iteration, and {'Charlie': 5}, in the third iteration.
  • for key in element: -> key will be a key of element at each iteration, so when element is {'Alice': 10}, the values for key will be 'Alice'. Keep in mind that element could contain more keys, but in this particular example it has just one.
  • print(key, element[key]) -> it prints key and the value of element for key key, i.e., it access the value of key in `element.

Way #2: Iterating over a dictionary's keys and values

# let's assume that data_list is the following dictionary
data_list = [{'Alice': 10}, {'Bob': 7}, {'Charlie': 5}]

for element in data_list:
    for key, value in element.items():
        print(key, value)

The output for this code snippet is the same as the previous one.

Explanation:

  • for element in data_list: -> it has the same explanation as the one in the code before.
  • for key, value in element.items(): -> at each iteration, element.items() will return a tuple that contains two elements. The former element is the key, and the latter is the value associated with that key, so when element is {'Alice': 10}, the value for key will be 'Alice', and the value for value will be 10. Keep in mind that this dictionary has only one key-value pair.
  • print(key, value) -> it prints key and value.

As stated before, there are multiple ways to iterate through a list of dictionaries, but to keep your code more Pythonic, avoid using indices or while loops.

had a similar issue, fixed mine by using a single for loop to iterate over the list, see code snippet

de = {"file_name":"jon","creation_date":"12/05/2022","location":"phc","device":"s3","day":"1","time":"44692.5708703703","year":"1900","amount":"3000","entity":"male"}
se = {"file_name":"bone","creation_date":"13/05/2022","location":"gar","device":"iphone","day":"2","time":"44693.5708703703","year":"2022","amount":"3000","entity":"female"}
re = {"file_name":"cel","creation_date":"12/05/2022","location":"ben car","device":"galaxy","day":"1","time":"44695.5708703703","year":"2022","amount":"3000","entity":"male"}
te = {"file_name":"teiei","creation_date":"13/05/2022","location":"alcon","device":"BB","day":"2","time":"44697.5708703703","year":"2022","amount":"3000","entity":"female"}
ye = {"file_name":"js","creation_date":"12/05/2022","location":"woji","device":"Nokia","day":"1","time":"44699.5708703703","year":"2022","amount":"3000","entity":"male"}
ue = {"file_name":"jsdjd","creation_date":"13/05/2022","location":"town","device":"M4","day":"5","time":"44700.5708703703","year":"2022","amount":"3000","entity":"female"}


d_list = [de,se,re,te,ye,ue]


for dic in d_list:
    print (dic['file_name'],dic['creation_date'])
Related