C. P. Wagner
C. P. Wagner

Reputation: 561

How to iterate through a list of dictionaries

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.

Upvotes: 53

Views: 273848

Answers (8)

Zhibekchach
Zhibekchach

Reputation: 41

def extract_fullnames_as_string(list_of_dictionaries):
    
return list(map(lambda e : "{} {}".format(e['first'],e['last']),list_of_dictionaries))


names = [{'first': 'Z', 'last': 'R'}, {'first': 'K', 'last': 'Z'}]
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. 

Upvotes: 4

lmiguelvargasf
lmiguelvargasf

Reputation: 69745

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.

Upvotes: 1

Avihoo Mamka
Avihoo Mamka

Reputation: 4786

You can easily do this:

for dict_item in dataList:
  for key in dict_item:
    print(dict_item[key])

It will iterate over the list, and for each dictionary in the list, it will iterate over the keys and print its values.

Upvotes: 13

Belz
Belz

Reputation: 1

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'])

Upvotes: -1

Maria Clara Bezerra
Maria Clara Bezerra

Reputation: 871

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'}

Upvotes: 2

Davis Rogers
Davis Rogers

Reputation: 61

"""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))

Upvotes: 1

atufa shireen
atufa shireen

Reputation: 407

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}')

Upvotes: 13

MSeifert
MSeifert

Reputation: 152637

You could just iterate over the indices of the range of the len of your list:

dataList = [{'a': 1}, {'b': 3}, {'c': 5}]
for index in range(len(dataList)):
    for key in dataList[index]:
        print(dataList[index][key])

or you could use a while loop with an index counter:

dataList = [{'a': 1}, {'b': 3}, {'c': 5}]
index = 0
while index < len(dataList):
    for key in dataList[index]:
        print(dataList[index][key])
    index += 1

you could even just iterate over the elements in the list directly:

dataList = [{'a': 1}, {'b': 3}, {'c': 5}]
for dic in dataList:
    for key in dic:
        print(dic[key])

It could be even without any lookups by just iterating over the values of the dictionaries:

dataList = [{'a': 1}, {'b': 3}, {'c': 5}]
for dic in dataList:
    for val in dic.values():
        print(val)

Or wrap the iterations inside a list-comprehension or a generator and unpack them later:

dataList = [{'a': 1}, {'b': 3}, {'c': 5}]
print(*[val for dic in dataList for val in dic.values()], sep='\n')

the possibilities are endless. It's a matter of choice what you prefer.

Upvotes: 124

Related Questions