Python中的关系图

Python中的关系图,python,dictionary,graph,nested-lists,Python,Dictionary,Graph,Nested Lists,我想在不使用任何库的情况下计算给定关系图的每个人的朋友数。该图表示为列表列表列表: graph=[[A,B],[A,C],[C,B],[B,D],[E]] 预期的字典输出:{'A':2,'B':3,'C':2,'D':1,'E':0} 注意:因为E没有朋友,E应该是0所以你可以这样做 graph = [["A","B"],["A","C"],["C","B"],["B","D"],["E"]] ans = {} for n in graph: if len

我想在不使用任何库的情况下计算给定关系图的每个人的朋友数。该图表示为列表列表列表:

graph=[[A,B],[A,C],[C,B],[B,D],[E]]

预期的字典输出:
{'A':2,'B':3,'C':2,'D':1,'E':0}


注意:因为E没有朋友,E应该是0所以你可以这样做

    graph = [["A","B"],["A","C"],["C","B"],["B","D"],["E"]]
    ans = {}
    for n in graph:
        if len(n) == 1:
                ans[n[0]] = ans.get(n[0], 0)
        else:
                l, r = n
                ans[l] = ans.get(l, 0) + 1
                ans[r] = ans.get(r, 0) + 1

    print(ans)
    # {'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}

所以你可以这样做

    graph = [["A","B"],["A","C"],["C","B"],["B","D"],["E"]]
    ans = {}
    for n in graph:
        if len(n) == 1:
                ans[n[0]] = ans.get(n[0], 0)
        else:
                l, r = n
                ans[l] = ans.get(l, 0) + 1
                ans[r] = ans.get(r, 0) + 1

    print(ans)
    # {'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}

您可以使用一个特定于图形的python库,名为。我更改了数据以便于加载

import networkx as nx
graph = [['A','B'],['A','C'],['C','B'],['B','D']]

G = nx.Graph()
G.add_edges_from(graph)
G.add_node('E')

dict(G.degree)                                                         
#  {'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}

编辑:这个答案是在添加“不使用任何库”警告之前给出的。

您可以使用特定于调用的图形的python库。我更改了数据以便于加载

import networkx as nx
graph = [['A','B'],['A','C'],['C','B'],['B','D']]

G = nx.Graph()
G.add_edges_from(graph)
G.add_node('E')

dict(G.degree)                                                         
#  {'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}

编辑:这个答案是在添加“不使用任何库”警告之前给出的。

得到了解决方案。有更好的方法吗

graph = [['A','B'],['A','C'],['C','B'],['B','D'],['E']]
dct ={}
for v in graph:
    for x in v:
            if x in v:
                    if x in dct.keys():
                            dct[x] += 1
                    else:
                            dct[x]= len(v)-1

print(dct)
{'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}

找到解决办法了。有更好的方法吗

graph = [['A','B'],['A','C'],['C','B'],['B','D'],['E']]
dct ={}
for v in graph:
    for x in v:
            if x in v:
                    if x in dct.keys():
                            dct[x] += 1
                    else:
                            dct[x]= len(v)-1

print(dct)
{'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}

简单的解决方案,无需更改输入格式

>>> graph = [['A', 'B'], ['A', 'C'],['C', 'B'], ['B', 'D'], ['E']]
>>> from collections import defaultdict
>>> friends_counter = defaultdict(int)
>>> for friends in graph:
...     for person in friends:
...         friends_counter[person] += len(friends) - 1
>>> dict(friends_counter)
{'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}

简单的解决方案,无需更改输入格式

>>> graph = [['A', 'B'], ['A', 'C'],['C', 'B'], ['B', 'D'], ['E']]
>>> from collections import defaultdict
>>> friends_counter = defaultdict(int)
>>> for friends in graph:
...     for person in friends:
...         friends_counter[person] += len(friends) - 1
>>> dict(friends_counter)
{'A': 2, 'B': 3, 'C': 2, 'D': 1, 'E': 0}


到目前为止你试过什么?给我们看一些代码!听起来像是一个家庭作业这是一个面试问题@Alderven到目前为止你试过什么?给我们看一些代码!听起来像是一个家庭作业。这是一个采访问题@Alderven,又一次回答错了。E没有朋友-应为0。再次回答错误。E没有朋友-应该为0。同意,nextworkX套件最适合这种情况,不知道为什么@Kash拒绝使用lib并喜欢重建轮子。这是一个面试问题,这就是为什么。@Kash啊,这是一个坏的警告信号。尽量不要接受这份工作。如果他们让你在没有图书馆的情况下做面试问题,那么整个工作可能就是这样。他们可能在不同的软件许可证(GPL等)上有问题,或者需要你从头开始制作所有东西,这样他们才能拥有IP(但你最终也会维护它)。这是在浪费你的生命。你可以在其他地方做更多的事情。最后,作为一名软件开发人员,你需要平衡你需要多少现金和你想产生什么样的影响。同意,nextworkX套件最适合这种情况,不知道@Kash为什么拒绝使用lib并喜欢重建轮子。这是一个面试问题,这就是为什么。@Kash啊,这是一个坏的警告信号。尽量不要接受这份工作。如果他们让你在没有图书馆的情况下做面试问题,那么整个工作可能就是这样。他们可能在不同的软件许可证(GPL等)上有问题,或者需要你从头开始制作所有东西,这样他们才能拥有IP(但你最终也会维护它)。这是在浪费你的生命。你可以在其他地方做更多的事情。最后,你需要平衡你需要多少现金和你作为一个软件开发人员想要产生什么样的影响。
。因为v
x
总是
True
。而且您不必在dct.keys()中执行
x
。它与dct中的x
图形=['A','B'],['A','C'],['C','B'],['B','D'],['E']]dct={}对于图形中的v:x,如果dct中的x:dct[x]+=1,其他:dct[x]=len(v)-1打印(dct){'A':2',B'3',C':2',D':1',E':0}
如果v中的x是不必要的。因为v
x
总是
True
。而且您不必在dct.keys()中执行
x
。它与dct中的x
graph=['A'、'B']、['A'、'C']、['C'、'B']、['B'、'D']、['E']]dct={}对于图中的v:对于v中的x:如果dct中的x:dct[x]+=1,其他:dct[x]=len(v)-1打印(dct){'A':2,'b3,'C':2,'D':1,'E':0