Python - 嵌套字典,与散列元组相比?

时间:2011-01-10 05:55:40

标签: python dictionary

我想知道嵌套dicts的优缺点与在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存储在不同的系统中),这需要逐层展开结构。

第一个问题 - 是否有其他方法使用字符串(工作室名称)作为键创建相同值的二级索引?即我仍然有四级嵌套dicts,但我也可以根据名称搜索单个条目。

其次 - 如何使用元组作为关键字来实现类似的效果?您可以考虑使用这种方法有什么优势吗?它会更清洁,更容易使用吗? (整个解开这有点痛苦,我觉得它不太平易近人。)

或者您可以推荐哪些其他数据结构可能更优/更容易访问/操作?

谢谢, 维克多

2 个答案:

答案 0 :(得分: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(...)

如果名称是研讨会的唯一属性,那只是(也就是说,没有重复名称的研讨会)。
此外,您还可以轻松地为研讨会词典中的每个Workshop对象分配ID。

答案 1 :(得分:3)

通常,如果需要嵌套字典,则应使用类。嵌套字典很复杂,无法跟踪您何时进行调试。通过类,您可以区分不同类型的词典,因此它变得更容易。 :)