Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 添加新元素后,所有元素都具有相同的值_Python_Python 2.7_Twitter_Tweepy - Fatal编程技术网

Python 添加新元素后,所有元素都具有相同的值

Python 添加新元素后,所有元素都具有相同的值,python,python-2.7,twitter,tweepy,Python,Python 2.7,Twitter,Tweepy,我正在使用tweepy库的search_users()方法。我想先搜索用户信息,然后提取一些必需的项目。最后,搜索结果应该存储在json文件中。 search_users api返回用户对象列表。因此,我迭代地处理用户列表,将项目存储在user_info变量中,然后使用list.append() 这是我的密码: def Search_Users(query): # TODO The name of the file should be modified. f1 = open("test" + "

我正在使用tweepy库的search_users()方法。我想先搜索用户信息,然后提取一些必需的项目。最后,搜索结果应该存储在json文件中。 search_users api返回用户对象列表。因此,我迭代地处理用户列表,将项目存储在user_info变量中,然后使用list.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
莱奥林0720
2609369460
[{'id':0,'id_str':'2609369460','name':'MeowKun','screen_name':'leolin0720'}]
梅奥昆
梅奥昆
750547890
[{'id':0,'id_str':'750547890','name':'MeowKun','screen_name':'MeowKun'},{'id':0,'id_str':'750547890','name':'MeowKun','screen_name':'MeowKun'}]
喵
喵喵
3240552107
[{'id':0,'id_str':'3240552107','name':'meow','screen_name':'meowkunmoow'},{'id':0,'id_str':'3240552107','name':'meow','screen_name':'meowkunmoow'},{'id':0,'id_str':'3240552107','name':'meow','screen_name':'meowkunmoow']
搜索已完成…


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

您正在使用相同的起始
user\u info
dict添加数据。将您创建的行移动到for循环中。

通常,这种列表的使用是有帮助的

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

您只能在
for
循环的前面创建一个
dict
。每次将数据放入
user\u info
时,数据都存储在相同的地址,每次将
user\u info
附加到
res
时,实际上是在附加相同的对象,因此
res
中的元素是相同的。

欢迎使用python!一切都是一个物体,需要一点时间去适应
user_info
是该对象在内存中所处位置的名称。如果要存储更多信息,每次都必须创建一个新对象。(粗略地说)下面的答案……谢谢你回答我的问题。现在我已经解决了这个问题。:)
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..."