Python iterate through dict

How to iterate through a python dictionary

A python Dictionary is one of the important data structure which is extensively used in data science and elsewhere when you want to store the data as a key-value pair. In this post we will take a deep dive into dictionaries and ways to iterate over dictionary and find out how to sort a dictionary values and other operations using dictionary data structure

Basically a dictionary in python is a mapping object where it maps a key to a value. The keys are hashable values which are mapped to values. The keys are arbitrary values and any values that are not hashable that is values containing list or other mutable types may not be used as Keys. Even it is not a good practice to use numeric values as keys also.

Читайте также:  jQuery - Enable or Disable Button

How to create a Dictionary?

We can create a Dictionary using key:value pairs separated by commas or using the dict constructor

Using comma separated key value pair

Using dict constructor

d = dict( name= "Charlie", age= 42, city = "NYC", state = "NY",rank = 1.0) 

Convert two list into a dictionary

d = dict( zip(['name','age','city','state','rank'],['Charlie',42,'NYC','NY',1.0])) 

Convert list of tuples(Key,Value) into a dictionary

d = dict([("name","charlie"),("age",42),("city","NYC","state","NY"),("rank",1.0)]) 

What’s Changed for Dictionary in Python 3.6

Dictionaries got ordered in Python 3.6 that means it remembers the order of insertion of key and value pairs. It means that keyword arguments can now be iterated by their creation order, which is basically the cpython implementation of python

The memory usage of this new dictionary implementation will also reduce the memory usage by 20-25%

Here is an example from the python dev mailing list for the implementation of new dict in python 3.6

Create a function to get the dictionary keys

Calling the above function in Python 3.5 and before returns an un-ordered dict_keys. Check the output the keys are randomly ordered

Output in Python 3.5 and before:

dict_keys(['c', 'd', 'e', 'b', 'a']) # Keys are randomly ordered 

Calling the same function in python3.6 and above returns a dict_keys in the same order as it has been passed in the function

Output in Python 3.6 and above:

dict_keys(['a', 'b', 'c', 'd', 'e']) # Keys are ordered 

Iterating thru a dictionary

As a python developer or data scientists you will be working on dictionaries a lot and there are calculations or actions that needs to be performed while working through the dictionary keys and values

In this section we will see what are the ways you can retrieve the data from the dictionary

Python supports a concept of iteration over containers and An iterator needs to define two methods: iter() and next(). Usually, the object itself defines the next() method, so it just returns itself as the iterator.

the iter defines the next method which will be called by statements like for and in to yield the next item, and next() should raise the StopIteration exception when there are no more items

Hope this clears how the iterator works on the dictionary

These methods are used by for and in statements, so what it means is if you put a dictionary under a for loop then it will automatically call the iter() method and iterate over the dictionaries keys

Iterate dictionary using keys

for keys in d: print(keys, ":", dPython iterate through dict) 
name : charlie age : 42 city : NYC state : NY rank : 1.0 

Dictionary view objects

This provide a window of the dictionary entries and when any of the item changes in the dict then it will reflect those changes in the views

As per the python official documentation:

The objects returned by dict.keys(), dict.values() and dict.items() are view objects. They provide a dynamic view on the dictionary’s entries, which means that when the dictionary changes, the view reflects these changes

Length of Dictionary

This returns number of key,value pairs in the dictionary

list of dictionary keys

the keys() function returns dict_keys() which is wrapped with the list to get a list object.

list of dictionary values

the values() function returns dict_values() which is wrapped with the list to get a list object

Iterate thru dict values

The dict_values is an iterable so you can directly iterate through the values of dictionaries using for loop

for value in d.values(): print(value) 

Iterate thru dict keys

The dict_keys is an iterable so you can directly iterate through the keys of dictionaries using for loop

for key in d.keys(): print(key) 

Iterate key, value pair using dict.items

This returns a (key,value) pair which is a tuple object.

for key,value in d.items(): print(key,":",value) 
name : Charlie age : 42 city : NYC state : NY rank : 1.0 

Dictionary Comprehension

It is a syntactical extension to list comprehension. It produce a dictionary object and you can’t add keys to an existing dictionary using this

You group the expression using curly braces and the left part before the for keyword expresses both a key and a value, separated by a colon

city = ['NYC', 'Boston', 'Los Angeles'] state = ['NY', 'Massachussets', 'California'] city_state_dict =

Dictionary Get Key

This method returns the value for key if key is in the dictionary, else default. If default is not given, it defaults to None , so that this method never raises a KeyError .

Let’s understand this with a small example

Here is a dictionary of city and respective states:

> city_state_dict = < >"NYC": "New York", > "Boston": "Massachussets", > "Charlotte": "North Carolina", > "Los Angeles": "California", > "Minnetonka": "Minnesota" > 

We have to output the state name when user enters a city

When city is in Dictionary Key:

city = "Charlotte" print(f'You live in state of ') 

You live in state of North Carolina

When city is not in Dictionary Key:

city = "Raleigh" print(f'you live in state of ') 

You live in state of None

Unpack a Dictionary using itemgetter

You can unpack a dictionary using operator.itemgetter() function which is helpful if you want to get the values from the dictionary given a series of keys

Look at this example below we are extracting the values of keys a, b and c using itemgetter

from operator import itemgetter d = a, b, c = itemgetter('a', 'b', 'c')(stuff) print(a,b,c) 

Sorting

There are certain situations where you need to sort the dictionary either by key or values. You can achieve this using sorted() function. In the below section we will see how to sort the dictionary by keys and values

if you are using python 3.6 and above then do not worry the dictionary are ordered data structured and can be easily sorted using sorted() function inside a dictionary comprehension

Sorting Dictionary by Keys

You can pass the entire dictionary dict_items as an argument to sorted function and it will return a list of tuples after sorting which can be converted back to dictionary using the dict constructor

You can see the output the dictionary keys are sorted alphabetically

Sorting Dictionary by Values

You can also sort the dictionary with their values using the sorted() function and another argument key and value of the key parameter should be a function that takes a single argument and returns a key to use for sorting purposes

By default it gives the result in ascending order. You can see the list of keys that is returned here based on the values of each of the corresponding keys arranged in ascending order

Ascending Order

if you want the list of keys to be in descending order above then add another argument called reverse as True and this will give the keys based on their values arranged in descending order

Descending order

d = sorted(d, key=d.get, reverse=True) 

Enumerate Dictionary

You can also enumerate through the dictionary and can get the index of each of the key

In the final output you can see the index for each of the key .

Just remember d.keys(), d.values() returns a dict_keys object which behaves a lot more like a set than a list

Therefore, dict.values() needs to be wrapped in a list. You can see in the below code we have used list(d.values())[index]

d = for index,item in enumerate(d): print(index," ",item," : ",list(d.values())[index]) 
0 a : 1000 1 b : 3000 2 c : 100 3 d : 542 4 e : 790 5 f : 1042 

Filter Dictionary

You can filter a dictionary using the dictionary comprehension which will create a new dictionary based on the filter criteria.

In this example we are filtering out all the key-value pairs where the value is < 500. The final dictionary have all the keys with values greater than 500

Update Dictionary value

The update method overwrites the existing keys and Update the dictionary with the key/value pairs

It accepts either a dictionary object or an iterable of key/value pairs

Delete Dictionary Key

you can use del to delete a key and it’s value from a dictionary if you are sure key exists in the dictionary else it Raises a KeyError if key is not in the map

dict.pop()

If you aren’t sure about the key exists in dictionary then use dict.pop().

This will return d[‘f’] if key exists in the dictionary, and None otherwise.

If the second parameter is not specified (i.e. d.pop(‘f’)) and key does not exist, a KeyError is raised.

Merge two or more Dictionaries

You can use the dictionary unpacking operator ** to merge two or more dictionary into one single dictionary and then you can iterate this new merged dictionary

city_1 = city_2 = # Merge Two Dictionaries merge_city_1_2 =

Conclusion:

We have reached to the end of this comprehensive and detailed post on iterating through dictionaries. So here is what we have learned so far through our journey thru this blog

  1. What are Dictionaries and how it works and what are different ways to create a dictionary in python
  2. Dictionary view objects, why it is important and it’s dynamic nature to reflect the changes immediately
  3. Dictionary get function to retrieve the values from a simple and nested dictionary and it returns None if the key is not found
  4. How to sort a dictionary by it’s keys and values in ascending and descending orders
  5. Enumerate thru a dictionary and get the index position of it’s keys which are ordered now after python 3.6
  6. Finally, what are the different methods to update and delete a dictionary key

I have tried to cover all the possible ways to iterate through a dictionary and explain different ways to work with dictionary efficiently.

Still if there are anything you feel should be included in this post or can be done in more optimized way then please leave a comment below.

Updated: December 4, 2019

Share on

You may also enjoy

pandas count duplicate rows

DataFrames are a powerful tool for working with data in Python, and Pandas provides a number of ways to count duplicate rows in a DataFrame. In this article.

Pandas value error while merging two dataframes with different data types

If you’re encountering a “value error” while merging Pandas data frames, this article has got you covered. Learn how to troubleshoot and solve common issues .

How to get True Positive, False Positive, True Negative and False Negative from confusion matrix in scikit learn

In machine learning, we often use classification models to predict the class labels of a set of samples. The predicted labels may or may not match the true .

Pandas how to use list of values to select rows from a dataframe

In this post we will see how to use a list of values to select rows from a pandas dataframe We will follow these steps to select rows based on list of value.

Источник

Оцените статью