2013-02-15 9 views
6

tôi thực hiện hoạt động này để lấy một queryset:Python 2 Làm thế nào để thay đổi danh sách các unicode trả về bởi hoạt động values_list để liệt kê các chuỗi

Name.objects.values_list('name', flat=True) 

Và nó sẽ trả về các kết quả này:

[u'accelerate', u'acute', u'bear', u'big'] 

Kết quả tất cả đều ở dạng unicode (u '). Làm thế nào để loại bỏ tất cả để tôi nhận được kết quả:

['accelerate', 'acute', 'bear', 'big'] 

Trả lời

14

Nếu bạn muốn mã hóa trong utf8, bạn chỉ có thể làm:

definitions_list = [definition.encode("utf8") for definition in definitions.objects.values_list('title', flat=True)] 
8

Bạn có thể gọi str trên tất cả các giá trị (lưu ý đồ đó là một chút lười biếng, list() thêm vào ngay lập tức biến nó trở thành một đối tượng lập chỉ mục):

thingy = list(map(str, [u'accelerate', u'acute', u'bear', u'big'])) 

Hoặc sử dụng một danh sách hiểu:

[str(item) for item in [u'accelerate', u'acute', u'bear', u'big']] 

cuối cùng, mặc dù lý do tại sao bạn sẽ đòi hỏi họ phải có str một cách rõ ràng; thêm vào một mẫu django (như {{ value }}), của u sẽ biến mất.

+0

Như đã đề cập, bạn có thể bỏ qua cuộc gọi list(). Tôi đã không gặp phải bất kỳ vấn đề nào khi làm như vậy. Nếu bạn có thể giải thích tại sao sẽ có một vấn đề, tôi sẽ đánh giá cao điều đó! – Dap

+0

Hmm, bạn nói đúng. Chỉ cần thử điều này trong py27 và py34, nơi py27 trả về một 'danh sách', py34 trả về một đối tượng' map'. Được sử dụng trong một mẫu có thể không có sự khác biệt. Tôi sẽ để lại câu trả lời, vì đầu ra của một trình thông dịch rõ ràng hơn rất nhiều (không có 'list()', py3 sẽ phát biểu một cái gì đó như ''). – akaIDIOT

2

Tôi nghĩ rằng cách ngắn được sử dụng json.dumps()

json.dumps(definitions.objects.values_list('title', flat=True)) 

do đó bạn sẽ nhận được kết quả chuỗi như là định dạng json như

'["accelerate", "acute", "bear", "big" ...]' 

và nếu bạn muốn thay đổi thành biến python, chỉ cần sử dụng eval như chức năng, do đó, mã của bạn nhiều như thế này

json_format_string = json.dumps(definitions.objects.values_list('title', flat=True)) 

my_list = eval(json_format_string) # ['accelerate', 'acute', 'bear', 'big' ...] 
0

i sử dụng này

my_list = list(map(str, [u'accelerate', u'acute', u'bear', u'big'...])) 
1

trong python 2.7 justing sử dụng bản đồ mà không cần danh sách là tốt cũng

list_of_python_strings = map(str, [u'accelerate']) 
Các vấn đề liên quan