Python - 嵌套字典与元组哈希对比?
我在想,使用嵌套字典和用元组做哈希在Python中各有什么优缺点呢?
这里的背景是,我在写一个小脚本,用来给会议的与会者分配“研讨会”。
每个研讨会都有几个属性(比如周、天、主题等等)。我们用其中四个属性来给每个与会者分配研讨会,也就是说,每个代表也会有周/天/主题等信息。
现在,我用一个嵌套字典来存储我的研讨会:
workshops = defaultdict(lambda: defaultdict(lambda:defaultdict(lambda:defaultdict(dict))))
with open(input_filename) as input_file:
workshop_reader = csv.DictReader(input_file, dialect='excel')
for row in workshop_reader:
workshops[row['Week ']][row['Stream']][row['Strand']][row['Day']] = row
return workshops
然后我可以用这个数据结构来给每个与会者分配他们的研讨会。
问题是,后来我需要遍历每个研讨会,并给它们分配一个ID(这个ID存储在另一个系统里),这就需要一层一层地解开这个结构。
第一个问题是,有没有其他方法可以创建一个二级索引,用字符串(研讨会名称)作为键?也就是说,我还是会有四层的嵌套字典,但我也可以根据名称来查找单独的条目。
第二个问题是,如何用元组作为键来实现类似的效果?你觉得使用这种方法有什么优势吗?会不会更简洁,或者更容易使用?(这种一层层解开的过程有点麻烦,我觉得不太友好)。
或者你有没有推荐其他的数据结构,可能更好、更容易访问或操作的?
谢谢,
Victor
2 个回答
4
一般来说,如果你需要把字典嵌套在一起,最好用类来代替。嵌套字典在调试的时候会变得很复杂,不容易管理。而使用类的话,你可以区分不同类型的字典,这样就简单多了。:)
7
class Workshop(object):
def __init__(self, week, stream, strand, day, name):
self.week = week
self.stream = stream
self.day = day
self.strand = strand
self.name = name
...
for row in workshop_reader:
workshops['name'] = Workshop(...)
这仅仅是在名字是工作坊的唯一属性的情况下才成立(也就是说,不能有名字重复的工作坊)。
另外,你也可以很方便地给每个工作坊对象在工作坊字典里分配一个ID。