我遇到了一个罕见的诚实至善的计算机科学问题(与通常的我如何制作这种语言相反,我不经常写 - 足够 - 做什么 - 我 -想要问题),并且真的觉得我缺乏CS学位来改变。
这有点混乱,因为我使用了几个列表的字典,但基本概念是这样的:一个 Twitter 抓取功能,将给定推文的转推添加到图形中,逐个节点,从原始向外构建作者(以追随者关系为边)。
for t in RTs_list:
g = nx.DiGraph()
followers_list=collections.defaultdict(list)
level=collections.defaultdict(list)
hoppers=collections.defaultdict(list)
retweets = []
retweeters = []
try:
u = api.get_status(t)
original_tweet = u.retweeted_status.id_str
print original_tweet
ot = api.get_status(original_tweet)
node_adder(ot.user.id, 1)
# Can't paginate -- can only get about ~20 RTs max. Need to work on small data here.
retweets = api.retweets(original_tweet)
for r in retweets:
retweeters.append(r.user.id)
followers_list["0"] = api.followers_ids(ot.user.id)[0]
print len(retweets),"total retweets"
level["1"] = ot.user.id
g.node[ot.user.id]['crossover'] = 1
if g.node[ot.user.id]["followers_count"]<4000:
bum_node_adder(followers_list["0"],level["1"], 2)
for r in retweets:
rt_iterator(r,retweets,0,followers_list,hoppers,level)
except:
print ""
def rt_iterator(r,retweets,q,followers_list,hoppers,level):
q = q+1
if r.user.id in followers_list[str(q-1)]:
hoppers[str(q)].append(r.user.id)
node_adder(r.user.id,q+1)
g.add_edge(level[str(q)], r.user.id)
try:
followers_list[str(q)] = api.followers_ids(r.user.id)[0]
level[str(q+1)] = r.user.id
if g.node[r.user.id]["followers_count"]<4000:
bum_node_adder(followers_list[str(q)],level[str(q+1)],q+2)
crossover = pull_crossover(followers_list[str(q)],followers_list[str(q-1)])
if q<10:
for r in retweets:
rt_iterator(r,retweets,q,followers_list,hoppers,level)
except:
print ""
那里还有一些其他的函数调用,但它们与问题无关。主要问题是从(例如)2 跳节点到 3 跳节点时 Q 如何计数。我需要它为从中心的每个分支构建到最大深度 (10),而现在我相信它只是为它尝试的第一个分支构建到最大深度。希望这是有道理的。如果没有,在这里输入对我有帮助;我想我只是在某个地方错过了一个循环,但我很难看到。
另外,请忽略各种 dicts 引用 Q+1 或 Q-1,这是我在重构以使其递归之前如何实现它的工件。
谢谢!