在字典中添加 key/value 时出现不需要的 "int to tuple" 转换
Non-desired "int to tuple" conversion when adding key/value in a dict
我正在使用 tweepy 抓取推文,我想为我的数据仓库格式化数据。
每次收到推文时都会调用以下方法:
def on_status(self, status):
statusAsDict= {
"text": status.text,
"created_at": status.created_at,
"language": status.lang,
"user": {
"id": status.author.id,
"name": status.author.name,
"screen_name": status.author.screen_name,
"verified": status.author.verified,
"favourites_count": status.author.favourites_count,
"followers_count": status.author.followers_count,
"friends_count": status.author.friends_count
}
}
if status.in_reply_to_status_id != None:
statusAsDict["in_reply_to_status_id"] = status.in_reply_to_status_id,
if status.in_reply_to_screen_name != None:
statusAsDict["in_reply_to_screen_name"] = status.in_reply_to_screen_name,
if status.coordinates != None:
statusAsDict["coordinates"] = status.coordinates,
if hasattr(status, "retweeted_status"):
statusAsDict["retweet"] = {}
statusAsDict["retweet"]["id"] = status.retweeted_status.id,
statusAsDict["retweet"]["user_id"] = status.retweeted_status.author.id,
statusAsDict["retweet"]["user_screen_name"] = status.retweeted_status.author.screen_name,
statusAsDict["retweet"]["user_verified"] = status.retweeted_status.author.verified,
statusAsDict["retweet"]["user_favourites_count"] = status.retweeted_status.author.favourites_count,
statusAsDict["retweet"]["user_followers_count"] = status.retweeted_status.author.followers_count,
statusAsDict["retweet"]["user_friends_count"] = status.retweeted_status.author.friends_count,
statusAsDict["retweet"]["retweet_count"] = status.retweeted_status.retweet_count,
statusAsDict["retweet"]["text"] = status.retweeted_status.text,
if status.in_reply_to_status_id != None:
print type(status.in_reply_to_status_id)
print type(statusAsDict["in_reply_to_status_id"])
print statusAsDict
它打印以下语句:
<type 'int'>
<type 'tuple'>
{'language': u'en', 'text': u'@fuckitslrhafi7 @fuckitslrhafi rt this from ff and main acc for 50 https://....', 'created_at': datetime.datetime(2016, 3, 30, 12, 25, 10), 'in_reply_to_status_id': (715149454257442816,), 'in_reply_to_screen_name': (u'fuckitslrhafi7',), 'user': {'favourites_count': 55, 'screen_name': u'JOlNTZOUlS', 'friends_count': 29, 'followers_count': 16, 'verified': False, 'id': 3040734513, 'name': u'accs in bio'}}
应该是
'in_reply_to_status_id': 715149454257442816
没有
'in_reply_to_status_id': (715149454257442816,)
如何避免从 int 到 tuple 的转换?
去掉你分配的那一行的尾随逗号。
statusAsDict["in_reply_to_status_id"] = status.in_reply_to_status_id
逗号定义元组,而不是圆括号,所以 (1)
仍然是一个整数,1,
是一个元组。
这一行:
statusAsDict["in_reply_to_screen_name"] = status.in_reply_to_screen_name,
有一个尾随逗号 (,),它将 int
转换为 tuple
。
你有一个额外的尾随逗号:
statusAsDict["in_reply_to_status_id"] = status.in_reply_to_status_id,
删除结尾的逗号,它应该可以工作。例如,1,
是一个元组 (1,)
,而 1
只是一个 int
.
您可能还想尝试使用 vars
函数将 status
转换为 dict
,例如
statusAsDict = vars(status)
我会说,删除语句中的逗号:
statusAsDict['in_reply_to_status_id'] = status.in_reply_to_status_id,
我正在使用 tweepy 抓取推文,我想为我的数据仓库格式化数据。
每次收到推文时都会调用以下方法:
def on_status(self, status):
statusAsDict= {
"text": status.text,
"created_at": status.created_at,
"language": status.lang,
"user": {
"id": status.author.id,
"name": status.author.name,
"screen_name": status.author.screen_name,
"verified": status.author.verified,
"favourites_count": status.author.favourites_count,
"followers_count": status.author.followers_count,
"friends_count": status.author.friends_count
}
}
if status.in_reply_to_status_id != None:
statusAsDict["in_reply_to_status_id"] = status.in_reply_to_status_id,
if status.in_reply_to_screen_name != None:
statusAsDict["in_reply_to_screen_name"] = status.in_reply_to_screen_name,
if status.coordinates != None:
statusAsDict["coordinates"] = status.coordinates,
if hasattr(status, "retweeted_status"):
statusAsDict["retweet"] = {}
statusAsDict["retweet"]["id"] = status.retweeted_status.id,
statusAsDict["retweet"]["user_id"] = status.retweeted_status.author.id,
statusAsDict["retweet"]["user_screen_name"] = status.retweeted_status.author.screen_name,
statusAsDict["retweet"]["user_verified"] = status.retweeted_status.author.verified,
statusAsDict["retweet"]["user_favourites_count"] = status.retweeted_status.author.favourites_count,
statusAsDict["retweet"]["user_followers_count"] = status.retweeted_status.author.followers_count,
statusAsDict["retweet"]["user_friends_count"] = status.retweeted_status.author.friends_count,
statusAsDict["retweet"]["retweet_count"] = status.retweeted_status.retweet_count,
statusAsDict["retweet"]["text"] = status.retweeted_status.text,
if status.in_reply_to_status_id != None:
print type(status.in_reply_to_status_id)
print type(statusAsDict["in_reply_to_status_id"])
print statusAsDict
它打印以下语句:
<type 'int'>
<type 'tuple'>
{'language': u'en', 'text': u'@fuckitslrhafi7 @fuckitslrhafi rt this from ff and main acc for 50 https://....', 'created_at': datetime.datetime(2016, 3, 30, 12, 25, 10), 'in_reply_to_status_id': (715149454257442816,), 'in_reply_to_screen_name': (u'fuckitslrhafi7',), 'user': {'favourites_count': 55, 'screen_name': u'JOlNTZOUlS', 'friends_count': 29, 'followers_count': 16, 'verified': False, 'id': 3040734513, 'name': u'accs in bio'}}
应该是
'in_reply_to_status_id': 715149454257442816
没有
'in_reply_to_status_id': (715149454257442816,)
如何避免从 int 到 tuple 的转换?
去掉你分配的那一行的尾随逗号。
statusAsDict["in_reply_to_status_id"] = status.in_reply_to_status_id
逗号定义元组,而不是圆括号,所以 (1)
仍然是一个整数,1,
是一个元组。
这一行:
statusAsDict["in_reply_to_screen_name"] = status.in_reply_to_screen_name,
有一个尾随逗号 (,),它将 int
转换为 tuple
。
你有一个额外的尾随逗号:
statusAsDict["in_reply_to_status_id"] = status.in_reply_to_status_id,
删除结尾的逗号,它应该可以工作。例如,1,
是一个元组 (1,)
,而 1
只是一个 int
.
您可能还想尝试使用 vars
函数将 status
转换为 dict
,例如
statusAsDict = vars(status)
我会说,删除语句中的逗号:
statusAsDict['in_reply_to_status_id'] = status.in_reply_to_status_id,