2015-06-10 65 views
0

這是我的代碼。Python字典裏面的列表不會追加

# Lista de usuarios 
UserList = [] 
UserDic = {} 
UserListQuery = UserProfile.objects.all() 
print "PRINTING QUERY " + UserListQuery 
for User in range(0,len(UserListQuery)): 
    UserDic['username'] = UserListQuery[User].user.get_username() 
    UserDic['titulo'] = UserListQuery[User].titulo 
    UserDic['descripcion'] = UserListQuery[User].descripcion[:60] 
    UserList.append(UserDic) 

print "PRINTING LIST " + UserList 
print "PRINTING LIST 0 " + UserList[0] 

我希望UserList是一個字典列表。我的意思是,如果我打印UserList [0] ['username'],它必須返回位置0的用戶名。好吧,我有很多用戶。我使用append,並將用戶添加到列表中。它運行不正常,它會覆蓋用戶,導致一個位置列表,這是UserListQuery的最後一個用戶。

有幫助嗎?

+0

據我可以在你的代碼片段中看到,沒有錯誤。 –

+0

嘗試在for循環中創建一個字典來追加而不是外部 –

回答

9

這裏的問題是,在每個循環中都使用相同的UserDic對象,因此每次使用新值覆蓋UserDic['username']。爲了防止這種情況,您必須每次創建一個新的UserDic。下面應該工作:

# Lista de usuarios 
UserList = [] 
UserListQuery = UserProfile.objects.all() 
for User in range(0,len(UserListQuery)): 
    UserDic = {} 
    UserDic['username'] = UserListQuery[User].user.get_username() 
    UserDic['titulo'] = UserListQuery[User].titulo 
    UserDic['descripcion'] = UserListQuery[User].descripcion[:60] 
    UserList.append(UserDic) 

print UserList 

(未測試的代碼)

+0

謝謝,我之前完成了它。我認爲可以使用dict有一個正常變量。解決了。 – dmanso

2

按我的意見,你應該試試這個

user_list = [] 
user_list_query = user_profile.objects.all() 
for user in range(0,len(user_list_query)): 
    user_list.append({ 
     'username': user_list_query[user].user.get_username(), 
     'titulo' : user_list_query[user].titulo, 
     'descripcion': user_list_query[user].descripcion[:60] 
    }) 

print user_list 

注意到我也改變你的對象的命名規則,因爲python is preferred to use underscores between the names instead of capital letters

一個更好的方法(更pythonic)做到這一點將是刪除所有多餘的東西,只是去一個單一的線路循環

user_list_query = user_profile.objects.all() 
print [{'username': user_list_query[user].user.get_username(), 'titulo' : user_list_query[user].titulo,'descripcion': user_list_query[user].descripcion[:60]} for user in range(0,len(user_list_query))]