Что является предпочтительным синтаксисом для инициализации dict: изогнутые литералы фигурной скобки {} или dict () функция?

Я включаю некоторое усилие изучить Python, и я обращаю пристальное внимание на общие стандарты кодирования. Это может походить на бессмысленно придирчивый в отношении гниды вопрос, но я пытаюсь сфокусироваться на лучших практиках, как я узнаю, таким образом, я не должен забывать 'плохие' привычки.

Я вижу две общепринятых методики для инициализации dict:

a = {
    'a': 'value',
    'another': 'value',
}

b = dict( 
    a='value',
    another='value',
)

Который считается "большим количеством pythonic"? Который Вы используете? Почему?

203
задан Ciro Santilli 新疆改造中心法轮功六四事件 21 December 2014 в 00:48
поделиться

3 ответа

Фигурные скобки. Передача аргументов с ключевыми словами в dict(), хотя она прекрасно работает во многих сценариях, может инициализировать карту, только если ключи являются допустимыми идентификаторами Python.

Это работает:

a = {'import': 'trade', 1: 7.8}
a = dict({'import': 'trade', 1: 7.8})

Это не работает:

a =                  dict(import='trade', 1=7.8)
>> SyntaxError: invalid syntax  ^
227
ответ дан 23 November 2019 в 04:57
поделиться

Первые фигурные скобки. В противном случае вы столкнетесь с проблемами согласованности с ключами, в которых есть нечетные символы, например = .

# Works fine.
a = {
    'a': 'value',
    'b=c': 'value',
}

# Eeep! Breaks if trying to be consistent.
b = dict( 
    a='value',
    b=c='value',
)
81
ответ дан 23 November 2019 в 04:57
поделиться

Первый вариант предпочтительнее:

  • Он работает для всех типов ключей, так что вы можете, например, сказать {1: 'one', 2: 'two'}. Второй вариант работает только для (некоторых) строковых ключей. Использование разных видов синтаксиса в зависимости от типа ключей было бы ненужной непоследовательностью.
  • Быстрее:

    $ python -m timeit "dict(a='value', another='value')"
    1000000 циклов, лучший из 3: 0.79 юсека на цикл
    $ python -m timeit "{'a': 'value', 'another': 'value'}"
    1000000 циклов, лучший из 3: 0.305 usec на цикл
    
  • Если бы специальный синтаксис для словарных литералов не предназначался для использования, его, вероятно, не было бы.
57
ответ дан 23 November 2019 в 04:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: