Добавить ребро между узлами, если список содержит часть другого списка

Я пытаюсь добавить ребра между узлами.

У меня есть текстовый файл, который я положил в список. Первый список содержит это:

          Title           ,            Rating

[('"$weepstake$" (1979) {(#1.2)}', '10.0'), 
('"\'Til Death Do Us Part" (2006) {Pilot(#1.0)}', '3.7'), 
('"\'Conversations with My Wife\'" (2010)', '4.2'), 
('"\'Da Kink in My Hair" (2007)', '4.2').....much more here ]

Я хочу создать узлы, помеченные всеми заголовками, и когда два заголовка имеют одинаковую оценку, я хочу создать грань между ними, так что в итоге я соберу все заголовки с оценкой 10,0 в одной сети и так далее.

Мой код до сих пор:

import networkx as nx
import string
from sys import maxint
import csv
import pprint
import re

def printStuff(labels,dG):
    for index, node in enumerate(dG.nodes()):
        print '%s:%d\n' % (labels[index],dG.node[node]['count']) 

str1 = titleList
#print str1

get_user_info = titleList1


dG = nx.DiGraph()




for i, word in enumerate(str1):

    try:
        next_word = str1[i]
        if not dG.has_node(word):
            dG.add_node(word)
            dG.node[word]['count'] = 1
        else:
            dG.node[word]['count'] += 1
        if not dG.has_node(next_word):
            dG.add_node(next_word)
            dG.node[next_word]['count'] = 0

        if not dG.has_edge(word, next_word):
            dG.add_edge(word, next_word, weight=0)
        else:
            dG.edge[word][next_word]['weight'] += 1
    except IndexError:
        if not dG.has_node(word):
            dG.add_node(word)
            dG.node[word]['count'] = 1
        else:
            dG.node[word]['count'] += 1
    except:
        raise

    printStuff(titleList, dG)

Выход:

    10.0:1

10.0:1

3.7:1

10.0:1

3.7:1

4.2:1

10.0:1

3.7:1

4.2:1

4.2:1

И для краев:

for edge in dG.edges():
    print '%s:%d\n' % (edge,dG.edge[edge[0]][edge[1]]['weight'])

Выход:

(('"\'Conversations with My Wife\'" (2010)', '4.2'), ('"\'Conversations with My Wife\'"   (2010)', '4.2')):0

(('"\'Da Kink in My Hair" (2007)', '4.2'), ('"\'Da Kink in My Hair" (2007)', '4.2')):0

(('"$weepstake$" (1979) {(#1.2)}', '10.0'), ('"$weepstake$" (1979) {(#1.2)}', '10.0')):0

(('"\'Til Death Do Us Part" (2006) {Pilot (#1.0)}', '3.7'), ('"\'Til Death Do Us Part" (2006) {Pilot (#1.0)}', '3.7')):0

1 ответ

Решение

Как насчет этого:

data = [('"$weepstake$" (1979) {(#1.2)}', '10.0'), 
('"\'Til Death Do Us Part" (2006) {Pilot(#1.0)}', '3.7'), 
('"\'Conversations with My Wife\'" (2010)', '4.2'), 
('"\'Da Kink in My Hair" (2007)', '4.2')]

import networkx as nx
G = nx.Graph()
G.add_edges_from(data)
nx.draw(G)

введите описание изображения здесь

если вы хотите, чтобы количество ребер из оценки.

len(G.edges('4.2'))

2

Другие вопросы по тегам