Python: почему я не могу распаковать Кортеж в словарь?

почему это не работает?:

d["a"], d["b"] = *("foo","bar")

есть ли лучший способ достичь того, чего я пытаюсь достичь?

3 ответов


Он будет работать, если вы определите словарь d перед рукой и удалите * оттуда:

>>> d = {}
>>> d["a"], d["b"] = ("foo","bar")

на самом деле вам не нужны эти скобки на RHS, поэтому это также будет работать:

>>> d['a'], d['b'] = 'foo', 'bar'

другие показали, как вы можете распаковать в dict. Однако, отвечая на ваш вопрос "есть ли лучший способ", я бы сказал, что:

d.update(a='foo',b='bar')

гораздо проще разобрать. Admitedtly, это не сработает, если у вас есть a и b, которые переменные, но тогда вы можете использовать:

d.update({a:'foo',b:'bar'})

и я думаю, что я все еще предпочитаю эту версию по следующим причинам:

  • он масштабируется до нескольких (>2) значений лучше, как это может быть разбитый на несколько строк более чисто
  • это делает его тут очистить, какой ключ связан с каким значением

и если вы начинаете с 2-кортежа значений, а не статического, как вы показываете, вы даже можете использовать zip:

d.update( zip(("a","b"),("foo","bar")) )

это правда не так хорошо, как два других варианта ...

... И мы только что рассмотрели все 3 способа использования dict.update :).


Это просто опечатка (тег *). Это работает (проверено в Python 2.7.3):

d = dict()
d["a"], d["b"] = ("foo", "bar")