首先,楼主给的csv文件本身是参差的,所以只能用csv.reader取得一行的list,需要自己去解析
然后,800个的数据量也不算太小,用dict建立索引的话效率不会太高
综上,我的想法是数据结构用一个保存作者名的set和保存2位有共同著作的作者的set,这样占用的空间也比较小,然后建立表格也比较简单。
不过实现需要一点时间,晚上回家之后试着写写看吧。不过800个确实挺多,显示出来的表能有多大啊。
-----------------------------------------------------------------------------------
import csv
import itertools
if __name__ == '__main__':
reader = csv.reader(open('books.csv'))
authors = set()
pairs = set()
for line in reader:
list = line[3:]
if list[0] == 'column1': continue
if '' in list : list.remove('')
for str in list: authors.add(str)
for pair in itertools.combinations(list, 2): pairs.add(pair)
line = ''
for author1 in authors:
line += '\t' + author1
print(line)
for author1 in authors:
line = author1
for author2 in authors:
line += '\t' + ('X' if author1 == author2 else '1' if ((author1, author2) in pairs or (author2, author1) in pairs) else '0')
print(line)
我写的,从楼上的代码学习到了itertools.combinations的用法,感谢。
代码修改了一次,我被某种一切都是对象的语言控制了,不用类不舒服斯基。现在这样看舒服多了。
musics = {'Jackson': ['Music A', 'Music B'],
'Lady Gaga': ['Umbrella', 'XXX']
}
上述代码展示了一个dict,key是作者名字,value是一个存有歌名的list。
当用户输入作者后,就可以查表打印出该作者的歌名。
当然, list里可以不止是字符串表示的歌名,而是含有歌曲各种数据的dict或者object。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)