添加新元素后所有元素都具有相同的值
All elements have same value after appending new element
我正在使用 tweepy 库的 search_users() 方法。我想先搜索用户信息,然后提取一些需要的项目。最后,搜索结果应存储在 json 文件中。
search_users api return 用户对象列表。因此,我迭代处理用户列表,将项目存储在 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
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...
谁能告诉我导致这个问题的原因?请解决方案。非常感谢。
您正在使用相同的起始 user_info
字典添加数据。将您创建的行移动到 for 循环中。
通常,这种使用列表的方式很有用
users = []
for user in users:
user_info = {}
user_info['name'] = user._json['name'].encode('utf-8')
.
.
.
users.append(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..."
你只在 for
循环前面创建一个 dict
。每次将数据放入 user_info
时,数据都存储在相同的地址,而每次将 user_info
附加到 res
时,实际上是在附加同一个对象,因此, res
中的元素相同。
我正在使用 tweepy 库的 search_users() 方法。我想先搜索用户信息,然后提取一些需要的项目。最后,搜索结果应存储在 json 文件中。 search_users api return 用户对象列表。因此,我迭代处理用户列表,将项目存储在 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
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...
谁能告诉我导致这个问题的原因?请解决方案。非常感谢。
您正在使用相同的起始 user_info
字典添加数据。将您创建的行移动到 for 循环中。
通常,这种使用列表的方式很有用
users = []
for user in users:
user_info = {}
user_info['name'] = user._json['name'].encode('utf-8')
.
.
.
users.append(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..."
你只在 for
循环前面创建一个 dict
。每次将数据放入 user_info
时,数据都存储在相同的地址,而每次将 user_info
附加到 res
时,实际上是在附加同一个对象,因此, res
中的元素相同。