猿问

Python:结合使用集和字典

我在这里使用此方法以字典的形式生成有向图,其中键的值是键指向的节点,即{'stack':['over','flow']},stack指向结束并流动...


def generateGraph(fileName):

    heroDict = {}

    graph = {}

    with open(fileName) as inFile:

        for line in inFile:#go through each line

            name_comic = line.rstrip().replace('"', '').split('\t') #split into list with name and comic book as strings

            if name_comic[1] in heroDict: #if the comic book is already in the dictionary

                heroDict[name_comic[1]] += [name_comic[0]] #add the hero into the comic's list of heroes

            else:

                heroDict.update({name_comic[1]: [name_comic[0]]}) # update dictionary with name and comic book

    for i in heroDict.values():

        for j in i:

            if graph.has_key(j):

                tempDict = copy.deepcopy(i)

                tempDict.remove(j)

                heroList = tempDict

                graph[j] += heroList

            else:

                tempDict = copy.deepcopy(i)

                tempDict.remove(j)

                heroList = tempDict

                graph[j] = heroList

        print graph #<========== the graph has duplicates, ie, values that are the same as their keys are present

    return graph

我的问题是,如何实现带有字典的集合的使用,以防止将与所讨论的键相同的值添加到键中?


千万里不及你
浏览 163回答 1
1回答

犯罪嫌疑人X

这是我重新编码您的图形生成器的方法;使用csv模块和collections.defaultdict类使代码大大更易读:import csvfrom collections import defaultdictdef generateGraph(fileName):&nbsp; &nbsp; heroDict = defaultdict(list)&nbsp; &nbsp; with open(fileName, 'rb') as inFile:&nbsp; &nbsp; &nbsp; &nbsp; reader = csv.reader(inFile, delimiter='\t')&nbsp; &nbsp; &nbsp; &nbsp; for row in reader:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name, comic = row[:2]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; heroDict[comic].append(name)&nbsp; &nbsp; graph = defaultdict(list)&nbsp; &nbsp; for names in heroDict.itervalues():&nbsp; &nbsp; &nbsp; &nbsp; for name in names:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; graph[name].extend(n for n in names if n != name)&nbsp; &nbsp; print graph&nbsp; &nbsp; return graph此处无需使用集。注意,我使用了更有意义的变量名。尽量避免i和j除非它们是整数索引。
随时随地看视频慕课网APP

相关分类

Python
我要回答