我在這里使用此方法以字典的形式生成有向圖,其中鍵的值是鍵指向的節點,即{'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我的問題是,如何實現帶有字典的集合的使用,以防止將與所討論的鍵相同的值添加到鍵中?
1 回答

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
這是我重新編碼您的圖形生成器的方法;使用csv模塊和collections.defaultdict類使代碼大大更易讀:
import csv
from collections import defaultdict
def generateGraph(fileName):
heroDict = defaultdict(list)
with open(fileName, 'rb') as inFile:
reader = csv.reader(inFile, delimiter='\t')
for row in reader:
name, comic = row[:2]
heroDict[comic].append(name)
graph = defaultdict(list)
for names in heroDict.itervalues():
for name in names:
graph[name].extend(n for n in names if n != name)
print graph
return graph
此處無需使用集。注意,我使用了更有意義的變量名。盡量避免i和j除非它們是整數索引。
添加回答
舉報
0/150
提交
取消