2017-06-01 68 views
-2

我對如何使用for循環創建一些字典並將這些字典追加到列表有點困惑。使用FOR LOOP的字典

object_1 = dict() 
object_1['ID'] = 1234 
object_1['NAME'] = 'ACB' 
... 
object_2 = dict() 
object_2['ID'] = 123 
object_2['NAME'] = 'ABC' 
... 

object_list = list() 
object_list.append(object_1) 
object_list.append(object_2) 

我想創建X字典對象,其中X是從我選擇的行數。

cur = conn.cursor() 
cur.execute("SELECT * FROM account WHERE date=current_date") 
rows = cur.fetchall() 

i=0 
for row in rows: 
... 
#What I thought 
i += 1 
obj_+i = dict() 
obj_+i['ID'] = row[0] 
.... 
.... 
obj_list = list() 
obj_list.append(obj_+i) 
+0

你是否真的縮進看起來像嗎? –

+0

這只是一個例子:] – TMoraes

+1

我想你會受益於閱讀https://nedbatchelder.com/text/names.html – chepner

回答

2

這應該做的工作

object_list = [] 
for row in rows: 
    object_list.append({'ID': row[0], 'NAME': row[1]}) 
+0

它的工作!但是,當我打印我的列表時,元素沒有按順序顯示,例如:「ID」,「NAME」,「CITY」| 「名稱」; 「CITY」...以及我如何才能訪問「NAME」? object_list [「NAME」]? – TMoraes

+1

@ TMoraes詞典沒有秩序。您可以使用列表理解:'[o [「NAME」] for object_list]' – Barmar

+0

對不起,但它是如何工作的? – TMoraes

2

如果我正確理解你的問題,這應該做的伎倆:

cur = conn.cursor() 
cur.execute("SELECT * FROM account WHERE date=current_date") 
rows = cur.fetchall() 

obj_list = [] 
for row in rows: 
    d = {} 
    d['ID'] = row[0] 
    ... 
    obj_list.append(d) 
1

不能使用字符串連接創建變量變量名這樣的 - 你並不需要,無論是。您可以在循環中重複使用相同的變量名稱,並將新創建的對象添加到列表中。在循環的下一次迭代中重用相同的變量名稱不會更改先前分配給該變量的對象。

此外,請注意,您應該將列表初始化obj_list = list()移到循環外部,否則您將在每次迭代中重置列表。

obj_list = list() 
for row in rows: 
    obj = dict() 
    obj['ID'] = row[0] 
    ... 
    obj_list.append(obj) 

如果要在循環後訪問列表中的單個字典,可以使用例如, obj_list[0]得到obj_1,obj_list[1]對於obj_2,等等。