我在调试此程序时遇到问题,该程序计算了许多推文的p值:
db = connection.data
shows = db.individual
def pvalue():
#p-values of total tweets
show_records = sorted([(m['total_tweets'], m) for m in db.individual.find()])
index=0
while index < len(show_records):
show = show_records[index]
tweet_pvalue = 1 - (index + 1.0) / len(show_records)
total=show['total_tweets']
shows.update({"id": show[1]["id"]}, {'$set':{"pvalue_total_tweets":tweet_pvalue}})
#need to remove several occurences of the same number of tweets to not false the p-value.
while show_records[index + 1]['total_tweets'] == total: #while next document has the same number of tweets
index+=1
show=show_records[index]
shows.update({"id": show[1]["id"]}, {'$set':{"pvalue_total_tweets":tweet_pvalue}})
它返回:
total=show['total_tweets']
TypeError: tuple indices must be integers, not str
非常感谢你的帮助!
答案 0 :(得分:1)
show_records = sorted([(m['total_tweets'], m) for m in db.individual.find()])
这将返回[(1, {'total_tweets': 1}), (2, {'total_tweets': 2}]
等元组列表。
这一个
show = show_records[index]
返回(例如,如果index == 1) - (2, {'total_tweets': 2})
,这是元组。而你正在努力做到
(2, {'total_tweets': 2})['total_tweets']
它会导致错误。你应该写:
(2, {'total_tweets': 2})[1]['total_tweets']