创建和索引2D字典

时间:2017-04-28 16:56:36

标签: python list dictionary

这只是我制作的一个快速片段,因为我的代码太复杂而无法进入,但我基本上想要的是:

  1. 一个dict,名称为键,空列表为值
  2. 在该空列表中附加问题列表
  3. 这些问题是密钥,它们的值是一个空列表
  4. 在该空列表中附加答案列表
  5. 我能够做到这一点,但我的问题是要引用它们的问题密钥或为其分配任何内容,除了密钥之外,我还必须在该列表中引用其索引。

    他们需要在列表中,因为每个名称都有一个问题列表,每个问题都有一个答案列表,如下所示:image

    这里的代码显示了我如何制作我的dict并附加到它,在实际的代码中这是在循环中完成的,但这是它的主旨: image2

    有没有办法绕过必须按编号索引问题列表? (所以我可以做我上面所做的而不会出错)

    更新

    我开始意识到这是一种祝福,因为数字索引是检查问题及其答案的快速方法。如果我索引[0]它将显示单个问题及其所有答案。这是有帮助的,因为问题是句子,输入它们可能会很痛苦。

    我仍然很好奇,如果我的问题得到答案,那么无论如何我都会发布。

    文字代码:

    >names = ["john","mark","jake"]
    >namesDict = {x:[] for x in names}
    >namesDict
    {'mark': [], 'jake': [], 'john': []}
    >namesDict["mark"].append({"question":[]})
    >namesDict
    {'mark': [{'question': []}], 'jake': [], 'john': []}
    >namesDict["mark"]["question"].append("answer")
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    TypeError: list indices must be integers, not str
    >namesDict["mark"][0]["question"].append("answer")
    >namesDict
    {'mark': [{'question': ['answer']}], 'jake': [], 'john': []}
    

1 个答案:

答案 0 :(得分:0)

我认为你在这里寻找的是跳过列表并嵌套一些词典。它看起来像这样:

names = ["john","mark","jake"]
namesDict = {x: {} for x in names}

namesDict['mark']['question1'] = []

namesDict['mark']['question1'].extend(('ans1_1', 'ans1_2', 'ans1_3'))
print(namesDict)  # {'john': {}, 'mark': {'question1': ['ans1_1', 'ans1_2', 'ans1_3']}, 'jake': {}}

namesDict['mark']['question2'] = []
namesDict['mark']['question2'].extend(('ans2_1', 'ans2_2', 'ans2_3'))
print(namesDict)  # {'john': {}, 'mark': {'question1': ['ans1_1', 'ans1_2', 'ans1_3'], 'question2': ['ans2_1', 'ans2_2', 'ans2_3']}, 'jake': {}}

唯一让你退缩的是namesDict['mark']会有多个与question1匹配的值。