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")