python将一句话重复n次输出_Python-重复给定函数n次

以下代码查找给定图“ G”的社区,并根据其所属的社区在该图内从0-n分配节点值.然后,代码为每个社区创建新的子图,并在每个社区中找到度数最高的节点.最后,每个子图的顶部节点都集成到整个字典中:

G = 'max : john', 'max : tom', 'jim : john'....'jack : james'

node_partition = dict(community_louvain.best_partition(G))

print node_partition = max: 1, john: 0, james: 3, jim: 4,...tom: 0

"""number of communities = n = list(set(node_partition.values()))"""

dict0 = {k: v for k, v in node_partition.items() if v !=[0]}

G0 = G.copy()

G0.remove_nodes_from(dict0)

degree0 = dict(G.degree(G0))

degree0_dict = dict(sorted(degree0.items(), key=operator.itemgetter(1), reverse=True)[:1])

star_dict = {**degree0_dict, **degree1_dict....**degreek_dict)

这种方法有效,但是一个图形可以有n个社区,并且如您所见,上面的代码仅适用于社区0中的节点.我必须手动读取确定的社区数量,并手动重复和编辑每个社区的代码数.如何应用自动重复此代码的函数,所以我可以拥有“ n”而不是“ 0”?

解决方法:

假设您的分区存储在node_partition中,然后我们制作一个新字典,该字典由反向键,node_partition的值对组成,这将有助于我们以后减少计算复杂性. (请参阅this for inverting dicitonary和this for getting key with max value in dictionary.)

def invert(d):

"""Turn {a:x, b:x} into {x:[a,b]}"""

r = {}

for k, v in d.items():

r.setdefault(v, []).append(k)

return r

invert_partition = invert(node_partition)

# { 0 :[tom, john] , 1: [mike, elton] ... }

max_deg_per_comm = {}

#iterate over each community

for community_id in invert_partition.keys():

#Extract the sub graph containing the community nodes

temp_graph = G.subgraph(invert_partition[community_id])

#Extract the degrees in the subgraph

temp_degree = dict(temp_graph.degree())

#Store it in a dictionary, with key as community_id and value as the node with max degree

max_deg_per_comm[community_id] = max(temp_degree, key=lambda x: temp_degree[x])

现在,您可以使用字典max_deg_per_comm来获取节点,假设您要查找社区0的节点,请使用

max_deg_per_comm[0]

标签:dictionary,repeat,networkx,python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值