列表中的Python字典不会附加

时间:2015-06-10 17:05:41

标签: python list dictionary

这是我的代码。

# 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中的最后一个用户。

帮助?

2 个答案:

答案 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))]