569

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?

7 Answers 7

788

Call dict with no parameters

new_dict = dict()

or simply write

new_dict = {}
Sign up to request clarification or add additional context in comments.

8 Comments

Is there any difference between dict() and {}? Or do people just prefer one over the other?
@ 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.
I confirm it's 3 times faster to use { } than dict() in python 3.x
Yeah, I get about 4 times faster in python 3.6 for {} over dict() and 5 times for [] over list().
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.
|
275

You can do this

x = {}
x['a'] = 1

Comments

44

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

4 Comments

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, '?').)
Consider using docs.python.org/2/library/… instead of writing a translate function or using .get() everywhere.
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?
This appears useful, but a bit complicated for beginners
28
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Will add the value in the python dictionary.

Comments

20
d = dict()

or

d = {}

or

import types
d = types.DictType.__new__(types.DictType, (), {})

2 Comments

What is the difference between types.DictType.__new__(types.DictType, (), {}) and just {}
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 ;-)
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

3 Comments

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")
(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()
I know this is super old, but isn't dict() more readable than {}? It clearly states that you're creating a dictionary, whereas the use of {} is ambiguous (same construct would be used to create an empty set).
9
>>> dict.fromkeys(['a','b','c'],[1,2,3])


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}

3 Comments

the question states that the dictionary should be a new empty instance
Please check the details in question. The question is how do I create a new empty dictionary in Python?
This is my favorite answer.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.