Tại sao không làm việc này ?:Python: Tại sao tôi không thể giải nén một tuple vào một từ điển?
d["a"], d["b"] = *("foo","bar")
Có cách nào tốt hơn để đạt được những gì tôi đang cố gắng để đạt được?
Tại sao không làm việc này ?:Python: Tại sao tôi không thể giải nén một tuple vào một từ điển?
d["a"], d["b"] = *("foo","bar")
Có cách nào tốt hơn để đạt được những gì tôi đang cố gắng để đạt được?
Nó sẽ có tác dụng nếu bạn xác định một từ điển d
trước mặt, và loại bỏ các *
từ đó:
>>> d = {}
>>> d["a"], d["b"] = ("foo","bar")
Trong thực tế, bạn không cần những ngoặc trên RHS, vì vậy đây cũng sẽ làm việc:
>>> d['a'], d['b'] = 'foo', 'bar'
Ahh, bạn không cần *. Cảm ơn. – jsj
@ trideceth12: Trong sự tò mò, bạn đã lấy ý tưởng cho '*' ở đâu? –
@ trideceth12. Bạn đang chào đón :) –
Nó chỉ là lỗi đánh máy (*
). Công trình này (được thử nghiệm bằng Python 2.7.3):
d = dict()
d["a"], d["b"] = ("foo", "bar")
Một số khác đã cho thấy cách bạn có thể giải nén thành một lệnh chính tả. Tuy nhiên, để trả lời câu hỏi của bạn "có cách nào tốt hơn", tôi sẽ cho rằng:
d.update(a='foo',b='bar')
dễ phân tích cú pháp hơn. Admitedtly, điều này không có tác dụng nếu bạn có a
và b
là biến, nhưng sau đó bạn có thể sử dụng:
d.update({a:'foo',b:'bar'})
và tôi nghĩ rằng tôi vẫn thích rằng phiên bản dành cho những lý do sau:
Và nếu bạn bắt đầu với một 2-tuple các giá trị, chứ không phải nó là tĩnh như bạn thấy, bạn thậm chí có thể sử dụng zip
:
d.update(zip(("a","b"),("foo","bar")))
đó là phải thừa nhận là không đẹp như người kia hai tùy chọn ...
... Và chúng tôi vừa trình bày tất cả 3 cách bạn có thể sử dụng dict.update
:).
Điều này thực sự tốt đẹp. Quên nó đi. Ít nhất điều này sẽ không xấu đi khi số lượng giá trị gia tăng. +1 –
Tôi chưa bao giờ nghĩ đến việc thử một cái gì đó như thế này ... – mgilson