2013-09-27 167 views
0

我有一個編碼字典列表:從字典的列表轉換一個關鍵字值列出

[u"{'name':'Tom', 'uid':'asdlfkj223'}", u"{'name':'Jerry', 'uid':'alksd32'}", ...] 

反正我有可以創建密鑰名剛值的列表?

更好的是,如果有人知道Django ORM足夠好,可以用PostgreSQL數據庫中的屬性下拉列表中的數據/列。

謝謝!

回答

3

僅獲取從數據庫表中的name列值,使用:

names = Person.objects.values_list('name', flat=True) 

(按https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.values_list

否則,給予

people = [{'name':'Tom', 'uid':'asdlfkj223'}, {'name':'Jerry', 'uid':'alksd32'},] 

本應該做的工作:

names = [person['name'] for person in people] 

你應該知道爲什麼你的數據項是字符串(包含一個字典的字符串表示)開始 - 它看起來不像它應該的樣子。或者,如果您實際上將dict作爲字符串存儲在您的數據庫中,或者更喜歡使用JSON而不是Python字符串表示形式,或者如果您必須使用當前格式,則此處提供的另一個問題中提供的AST解析解決方案應該工作。

+0

他們不是字典雖然。他們是字符串 – TerryA

+0

是的,這是他可能需要首先解決的問題 - 看起來不對。 –

+0

是的,這不是我所處的最佳狀態。謝謝您的幫助。我實際上嘗試了你提到的兩種方法,但是像這樣存儲字符串很頭痛,並且會導致錯誤。 – user1909186

2

您可以使用ast.literal_eval

>>> data = [u"{'name':'Tom', 'uid':'asdlfkj223'}",u"{'name':'Jerry', 'uid':'alksd32'}"] 
>>> import ast 
>>> [ast.literal_eval(d)['name'] for d in data] 
['Tom', 'Jerry'] 
+0

在常規'eval'上使用'ast.literal_eval'有什麼好處? – jbaiter

+1

@jbaiter ast.literal_eval'比使用eval更安全。 [Here's](http://docs.python.org/3.4/library/ast.html#ast.literal_eval)鏈接到文檔 – TerryA

+0

@jbaiter:'eval'是不安全的,使用它不是一個好主意。 「ast.literal_eval」對此目的是安全的。 –