Почему dict в python требует ([()])

Изучаю питон. Конспектирую словари, не понимаю почему синтаксис dict() такой странный. Как работать с list() или tuple() предельно понятно, но у dict какие то свои правила. Как создать словарь с помощью литерала - ясно. Как с помощью dict() тоже, по крайней мере в случае с объявлением переменных в самом dict(). Но непонятно, почему нельзя передать ему те же две переменные, но уже объявленные вне dict()? Зачем городить какие то [()] внутри этого dict() при попытке передать ему объекты напрямую?

Почему это dict_test=dict([(1,'Один'), (2,'Два')]) - работает,

а это dict_test=dict((1,'Один'), (2,'Два')) - нет, python ругается на то, что агрументов было передано 2, в то время как dict() якобы может принять только один? Почему он принимает только список кортежей? Ведь по идее с неизменяемым типом он должен как раз хорошо взаимодействовать?


Ответы (3 шт):

Автор решения: Danis
dict([(1,'Один'), (2,'Два')])

передаёте одни объект - [(1,'Один'), (2,'Два')]

dict((1,'Один'), (2,'Два'))

передаёте два объекта - (1,'Один') и (2,'Два')

Если их взять в круглые скобки, то есть tuple то все работает

dict(((1,'Один'), (2,'Два')))

передаёте одни объект - ((1,'Один'), (2,'Два'))

→ Ссылка
Автор решения: roddar92

Судя по всему, вы хотите передать в конструктор генератор пар. Метод dict может принимать iterable-структуру, в том числе и генератор. Но для него нужен generator comprehension типа:

dict((i, i + 1) for i in range(10))

или

dict((("a", 1), ("b", 2)))

потому что tuple тоже являются iterable-объектами, как и генераторы.

По методу dict есть неплохая документация сказано, что тот может принимать

→ Ссылка
Автор решения: CrazyElf

Ну вообще-то list в такой форме тоже не работает:

list(1, 2)

TypeError: list() takes at most 1 argument (2 given)

Потому что и dict и list хотят на вход iterable, из элементов которого они и заполняются.

В качестве iterable можно передать и список, и кортеж, и генератор, внутри которого уже для списка могут быть одиночные элементы, а вот для словаря нужно два элемента, поэтому внутри должен быть кортеж, например, поэтому и возникают ещё одни скобки - один дополнительный уровень вложенности по сравнению с инициализацией списка.

→ Ссылка