2012-08-17 54 views
0

我正在嘗試將一些記錄添加到字典中。無法更新python中的字典

起初,我是這樣做這樣

licenses = [dict(licenseid=row[0], client=row[1], macaddress=row[2], void=row[18]) for row in db] 

但因爲我已經意識到我需要做一些處理,過濾來自數據庫的記錄,所以我嘗試了代碼更改爲:

for rec in db: 
    if rec['deleted'] == False: 
     licenses.update(dict(licenseid=row[0], client=row[1], macaddress=row[2], void=row[18]) 

這段代碼沒有例外地運行,但我最終只能得到許可證中的最後一個數據庫記錄,這讓我感到困惑。

有什麼建議嗎?

回答

1

我覺得licenses是一個列表:

licenses = [] 
... 

,你應該追加到它的新字典:

licenses.append(dict(...)) 
0

如果您的文章中的代碼是您的真實代碼,那麼您可以考慮在最後一行(帶有更新的行)中用rec替換行,因爲您有更新字典的機會總是相同的值!

編輯:在這段代碼中顯然存在一些非常錯誤的情況,從另一個答案我看到我忽略了許可證被聲明爲列表的事實:所以沒有異常的唯一解釋是您顯示的代碼段是不是真正的或者你所有的記錄都是這樣的,rec ['deleted']是True(所以更新方法永遠不會被調用)。

1

如果我理解正確的話,你要在一個字典中添加多條記錄,對 ?爲什麼不製作詞典列表呢?

  • 開始通過構建你需要(讓你始終以相同的順序訪問它們)的密鑰列表。

    keys = ["licenses", "client", "macaddress", "void"] 
    
  • 構造一個空的字典:

    licences = dict((k,[]) for k in keys] 
    
  • 遞歸條目添加到您的字典:

    for (k,item) in row: 
        dict[k].append(item) 
    

當然,這可能是更容易建立的名單先記錄所有記錄,然後在最後建立一個字典。

1

答曰dict.update()文檔:

更新([其他])更新詞典與來自其他 ,覆蓋現有的密鑰的密鑰/值對。返回無。

這解釋了爲什麼上次更新「獲勝」。 licences不能是列表,因爲沒有列表的更新方法。

0

後的反應,我已經修改了我的代碼:

licenses = [] 

for row in db: 
     if row.deleted == False: 
      licenses.append(dict(licenseid=row[0], client=row[1], macaddress=row[2], void=row[18])) 

現在完美的作品。感謝您發現我的愚蠢! ;)