Tôi có một danh sách các tên biến, như thế này:Đưa ra một danh sách các tên biến trong Python, làm cách nào để tạo một từ điển có tên biến là các khóa (cho các giá trị của biến)?
['foo', 'bar', 'baz']
(ban đầu tôi hỏi làm thế nào để chuyển đổi một danh sách các biến Xem câu trả lời Greg Hewgill của bên dưới..)
Làm thế nào để chuyển đổi này cho một người từ điển mà các phím là các tên biến (như các chuỗi) và các giá trị là các giá trị của các biến?
{'foo': foo, 'bar': bar, 'baz': baz}
Bây giờ tôi lại đặt ra câu hỏi, tôi đã đưa ra:
d = {}
for name in list_of_variable_names:
d[name] = eval(name)
mà có thể được cải thiện khi?
Cập nhật, đáp ứng cho câu hỏi (trong một bình luận) về việc tại sao tôi muốn làm điều này:
Tôi thường thấy mình sử dụng toán tử% đến chuỗi với một cuốn từ điển tên và giá trị để suy . Thường thì các tên trong chuỗi chỉ là tên của các biến cục bộ. Vì vậy, (với câu trả lời dưới đây) tôi có thể làm một cái gì đó như thế này:
message = '''Name: %(name)s
ZIP: %(zip)s
Dear %(name)s,
...''' % dict((x, locals()[x]) for x in ['name', 'zip'])
Sửa đổi. Tôi thấy không có tình huống hợp lý nơi bạn sẽ muốn làm điều đó, và tôi thấy không có cách nào để làm cho nó mạnh mẽ, và chắc chắn không phải với eval. Điều gì sẽ xảy ra nếu tên của danh sách tên che khuất một trong các tên quan tâm, v.v. – ddaa
Trả lời để cập nhật theo nhận xét của tôi: Thành ngữ Python để làm điều đó (mà tôi không hỗ trợ, nhưng tôi đã thấy được sử dụng), là "string% locals()" trực tiếp. – ddaa
Bạn có thể thay thế 'dict ((x, locals() [...)' chỉ bằng 'vars()' – jfs