Creating a new dictionary in Python
Asked Answered
T

8

554

I want to build a dictionary in Python. However, all the examples that I see are instantiating a dictionary from a list, etc . ..

How do I create a new empty dictionary in Python?

Tripoli answered 8/12, 2011 at 1:10 Comment(0)
I
765

Call dict with no parameters

new_dict = dict()

or simply write

new_dict = {}
Insectivore answered 8/12, 2011 at 1:13 Comment(7)
Is there any difference between dict() and {}? Or do people just prefer one over the other?Foretell
@ Matt Apparently CPython 2.7 dict() is slower (6 times slower?), See: doughellmann.com/2012/11/… In any case I am starting to prefer the constructor syntax anyways since I find it easier to type and move code between dicts and function calls.Lehmbruck
@DavidWheaton Thanks for pointing this out! Personally, I find new_dict = dict() slightly more readable, nonetheless if there is such a big difference in regards to performance... Would go for performance! ;) (For those who are confused about Python and Cphython see: here)Lynnettelynnworth
I confirm it's 3 times faster to use { } than dict() in python 3.xGuanase
Yeah, I get about 4 times faster in python 3.6 for {} over dict() and 5 times for [] over list().Oxbridge
In the vast majority of cases, it doesn't matter if it takes six times longer, since that's still an unnoticeably small amount of time.Illassorted
{} is faster because it cant be overwritten but dict() can be so there are some extra checks and lookupsTinware
G
271

You can do this

x = {}
x['a'] = 1
Grunion answered 8/12, 2011 at 1:13 Comment(0)
J
36

Knowing how to write a preset dictionary is useful to know as well:

cmap =  {'US':'USA','GB':'Great Britain'}

# Explicitly:
# -----------
def cxlate(country):
    try:
        ret = cmap[country]
    except KeyError:
        ret = '?'
    return ret

present = 'US' # this one is in the dict
missing = 'RU' # this one is not

print cxlate(present) # == USA
print cxlate(missing) # == ?

# or, much more simply as suggested below:

print cmap.get(present,'?') # == USA
print cmap.get(missing,'?') # == ?

# with country codes, you might prefer to return the original on failure:

print cmap.get(present,present) # == USA
print cmap.get(missing,missing) # == RU
Jana answered 11/4, 2015 at 19:57 Comment(4)
Good point! But I think the bit with cxlate makes your answer seem too complicates. I'd just keep the initialization part. (cxlate itself is too complicated. You could just return cmap.get(country, '?').)Peregrinate
Consider using docs.python.org/2/library/… instead of writing a translate function or using .get() everywhere.Vegetative
Perhaps I would, except that the documentation is absolutely opaque to me -- it's terrible. I have no idea what they're telling me to do, or why I should do it. And .get() seems to do exactly the right thing -- plus it's extremely flexible. I'm sure its a lack of understanding on my part. With that in mind, my questions are: why bother? What is saved here, easier here, faster here, etc.? Benefit is exactly what?Jana
This appears useful, but a bit complicated for beginnersLibratory
G
26
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Will add the value in the python dictionary.

Gat answered 27/3, 2017 at 11:11 Comment(0)
T
20
d = dict()

or

d = {}

or

import types
d = types.DictType.__new__(types.DictType, (), {})
Toile answered 8/12, 2011 at 1:16 Comment(2)
What is the difference between types.DictType.__new__(types.DictType, (), {}) and just {}Thither
For anyone reading this: the last "solution" is a bit of a joke - you can use it (in python 2.x at least - won't work in py3k), but no one in it's own mind would ever want to do so ;-)Felske
D
13

So there 2 ways to create a dict :

  1. my_dict = dict()

  2. my_dict = {}

But out of these two options {} is more efficient than dict() plus its readable. CHECK HERE

Directrix answered 31/8, 2018 at 19:37 Comment(2)
Why are you referring to python2.7? (in a quite old article: 2012-11-12, "The Performance Impact of Using dict() Instead of {} in CPython 2.7")Fredericksburg
(7 yrs later) performances did not changed even in python 3.x.x you can see it running a %timeit my_dict = {} vs %timeit my_dict = dict()Enclitic
A
8
>>> dict.fromkeys(['a','b','c'],[1,2,3])


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
Arenicolous answered 20/10, 2018 at 8:53 Comment(2)
the question states that the dictionary should be a new empty instanceLess
Please check the details in question. The question is how do I create a new empty dictionary in Python?Erode
S
1

I do not have enough reputation yet to be able comment, so I share this as an answer.

The link shared by @David Wheaton in his comment to the accepted answer is no longer valid as Doug Hellmann has migrated his site (source: https://doughellmann.com/posts/wordpress-to-hugo/).

Here is the updated link about "The Performance Impact of Using dict() Instead of {} in CPython 2.7": https://doughellmann.com/posts/the-performance-impact-of-using-dict-instead-of-in-cpython-2-7-2/

Spondee answered 21/2, 2022 at 5:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.