所有元素在附加新元素后都有相同的值

2024-06-28 14:44:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用tweepy库的search\u users()方法。我想先搜索用户信息,然后提取一些必需的项目。最后,搜索结果应该存储在json文件中。 search\u users api返回用户对象的列表。因此,我迭代地处理用户列表,将项目存储在user\ info变量中,然后使用列表.append(). 你知道吗

这是我的密码:

def Search_Users(query):
# TODO The name of the file should be modified.
f1 = open("test" + ".json", 'w')
# END TODO
res = []
user_info = {'name': None, 'screen_name': None, 'id': 0}
users = Tweeapi.search_users(q=query, per_page=20, page=10)

for user in users:
    user_info['name'] = user._json['name'].encode('utf-8')
    print user_info['name']
    user_info['screen_name'] = user._json['screen_name'].encode('utf-8')
    print user_info['screen_name']
    user_info['id_str'] = user._json['id_str'].encode('utf-8')
    print user_info['id_str']
    res.append(user_info)
    print res
json.dump(res, f1)
print "Searching finished..."

一开始我很困惑,因为搜索结果似乎是相同的值。然后我发现,每次向res列表添加新元素时,其他元素也会发生变化。就像这样:

例如,我搜索“MeowKun”。结果将是: MeowKun leolin0720 2609369460 [{'id': 0, 'id_str': '2609369460', 'name': 'MeowKun', 'screen_name': 'leolin0720'}] MeowKun MeowKun 750547890 [{'id': 0, 'id_str': '750547890', 'name': 'MeowKun', 'screen_name': 'MeowKun'}, {'id': 0, 'id_str': '750547890', 'name': 'MeowKun', 'screen_name': 'MeowKun'}] meow MeowkunMeow 3240552107 [{'id': 0, 'id_str': '3240552107', 'name': 'meow', 'screen_name': 'MeowkunMeow'}, {'id': 0, 'id_str': '3240552107', 'name': 'meow', 'screen_name': 'MeowkunMeow'}, {'id': 0, 'id_str': '3240552107', 'name': 'meow', 'screen_name': 'MeowkunMeow'}] Searching finished...

谁能告诉我造成这个问题的原因吗?还有解决办法。谢谢。你知道吗


Tags: nameinfoidjson列表searchresscreen
3条回答

通常,这种使用列表的方式很有帮助

 users = []    
 for user in users:
    user_info = {}
    user_info['name'] = user._json['name'].encode('utf-8')
    .
    .
    .
    users.append(user_info)

使用相同的起始user_infodict添加数据。将创建的行移到for循环中。你知道吗

def Search_Users(query):
    # TODO The name of the file should be modified.
    f1 = open("test" + ".json", 'w')
    # END TODO
    res = []
    users = Tweeapi.search_users(q=query, per_page=20, page=10)

    for user in users:
        user_info = {} #create a new dict
        user_info['name'] = user._json['name'].encode('utf-8')
        print user_info['name']
        user_info['screen_name'] = user._json['screen_name'].encode('utf-8')
        print user_info['screen_name']
        user_info['id_str'] = user._json['id_str'].encode('utf-8')
        print user_info['id_str']
        res.append(user_info)
        print res
    json.dump(res, f1)
    print "Searching finished..."

for循环前面只创建一个dict。每次将数据放入user_info时,数据都存储在相同的地址,每次将user_info追加到res时,实际上是追加了相同的对象,因此res中的元素是相同的。你知道吗

相关问题 更多 >