这是我的代码。
# 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] ['用户名'],它必须返回位置0的用户名。好吧,我有很多用户。我使用追加,我将用户添加到列表中。它运行不正常,它会覆盖用户,从而产生一个位置列表,即UserListQuery中的最后一个用户。
帮助?
答案 0 :(得分: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
(未经测试的代码)
答案 1 :(得分: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))]