【问题标题】:Overwriting Key Value Pairs Versus Creating New One for Different Key覆盖键值对与为不同的键创建新的键值对
【发布时间】:2019-05-03 05:59:26
【问题描述】:

我的目标:

{0: {'0':'0', '1':'1'), 1: {'0':'2', '1':'3'}, 2: {'0':'4','1':'0'}, 3:{'0':'1','1':'2'}, 4:{'0':'3' ,'1':'4' }}

我得到了什么:

{0: {'1': '1'}, 1: {'1': '3'}, 2: {'1': '0'}, 3: {'1': '2'}, 4: {'1': '4'}}

因此,它只存储 '1' 部分并覆盖 '0' 部分,但我不确定如何解决此问题,因为我似乎读到的所有内容都表明它应该在存在时更新或在不存在时创建。 几个注意事项:状态是 0 到 4,字母表是 ['0','1'] 值只是文本文件中的单个字符。

这是我的代码:

for state in range(0, numStates):
    for letter in alphabet:
        value = DFAFileLines[state+3].split()[alphabet.index(letter)]
        print("State: " + str(state) + " Letter: " + letter +" Value: " + value)
        itemDict = dict()
        itemDict[letter] = value
        transitionTable[state] = itemDict

【问题讨论】:

  • 你需要edit你的问题并添加足够的代码(可能还有数据),这样有一些可执行的东西会重现问题。

标签: python python-3.x dictionary nested overwrite


【解决方案1】:

因此,我最终不得不在最初定义字典时将默认值添加到字典中,并且效果很好。 (请注意,这是我尝试过的代码的早期版本,而不是我在发布时所拥有的)这是更新后的代码:

transitionTable = dict(dict())
for state in range(0, numStates):
    transitionTable[state] = {k: 0 for k in alphabet}

for state in range(0, numStates):
    for letter in alphabet:
        value = DFAFileLines[state+3].split()[alphabet.index(letter)]
        stateDict = transitionTable[state]
        stateDict[letter] = value

我原来的不同是

transitionTable[state] = {k for k in alphabet}

现在

transitionTable[state] = {k: 0 for k in alphabet}

【讨论】:

    【解决方案2】:

    原始代码的问题是您每次都通过内部循环重置itemDict,并且您还应该为状态键的每个外部for循环分配一次transitionTable

    for state in range(0, numStates):
            itemDict = dict()
            for letter in alphabet:
                value = DFAFileLines[state+3].split()[alphabet.index(letter)]
                print("State: " + str(state) + " Letter: " + letter +" Value: " + value)
                itemDict[letter] = value
            transitionTable[state] = itemDict
    

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 2019-03-02
      • 2019-02-13
      • 1970-01-01
      相关资源
      最近更新 更多