What is the preferred syntax for initializing a dict: curly brace literals {} or the dict() function?
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Hypnotic Puzzle2
--
Chapters
00:00 What Is The Preferred Syntax For Initializing A Dict: Curly Brace Literals {} Or The Dict() Function
00:27 Accepted Answer Score 297
00:55 Answer 2 Score 100
01:13 Answer 3 Score 65
01:48 Answer 4 Score 7
02:32 Answer 5 Score 3
02:59 Thank you
--
Full question
https://stackoverflow.com/questions/2853...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #dictionary
#avk47
ACCEPTED ANSWER
Score 299
Curly braces. Passing keyword arguments into dict(), though it works beautifully in a lot of scenarios, can only initialize a map if the keys are valid Python identifiers.
This works:
a = {'import': 'trade', 1: 7.8}
a = dict({'import': 'trade', 1: 7.8})
This won't work:
a = dict(import='trade', 1=7.8)
It will result in the following error:
    a = dict(import='trade', 1=7.8)
             ^
SyntaxError: invalid syntax
ANSWER 2
Score 102
The first, curly braces. Otherwise, you run into consistency issues with keys that have odd characters in them, like =.
# Works fine.
a = {
    'a': 'value',
    'b=c': 'value',
}
# Eeep! Breaks if trying to be consistent.
b = dict( 
    a='value',
    b=c='value',
)
ANSWER 3
Score 65
The first version is preferable:
- It works for all kinds of keys, so you can, for example, say 
{1: 'one', 2: 'two'}. The second variant only works for (some) string keys. Using different kinds of syntax depending on the type of the keys would be an unnecessary inconsistency. It is faster:
$ python -m timeit "dict(a='value', another='value')" 1000000 loops, best of 3: 0.79 usec per loop $ python -m timeit "{'a': 'value','another': 'value'}" 1000000 loops, best of 3: 0.305 usec per loop- If the special syntax for dictionary literals wasn't intended to be used, it probably wouldn't exist.
 
ANSWER 4
Score 3
I think the first option is better because you are going to access the values as a['a'] or a['another']. The keys in your dictionary are strings, and there is no reason to pretend they are not. To me the keyword syntax looks clever at first, but obscure at a second look. This only makes sense to me if you are working with __dict__, and the keywords are going to become attributes later, something like that.