向字典中添加新键时出现键错误



这是我的代码:

nums = sorted(nums)
n = len(nums)
maps = { 0 : [nums[0]]}
maps[2] = ["shot"]
dp = [1 for _ in nums]
for i in range(1 , n):
for j in range(i , -1 , -1):
if nums[i] % nums[j] == 0:
dp[i] = dp[j]+1
print(maps)
if i not in maps.keys():
maps[i] = maps[j].append(nums[i])

错误信息:

KeyError: 1
maps[i] = maps[j].append(nums[i])
Line 15 in largestDivisibleSubset (Solution.py)
ret = Solution().largestDivisibleSubset(param_1)
Line 41 in _driver (Solution.py)
_driver()
Line 52 in <module> (Solution.py)

输入:nums = [1,2,3,5,7]

您只能使用append方法向已经存在的键插入值。所以你可以这样做:

maps[i] = nums[i]

或:

maps[i] = nums[j]

这是你的问题节:

if i not in maps.keys():
maps[i] = maps[j].append(nums[i])

这里你问'如果i不在地图字典中,那么从nums数组中获取索引i处的值,并将其附加到地图字典中键j引用的值,然后将该函数的结果分配回字典中键i的值'。

append()返回None,这意味着您只需将None放在键i上。但你的错误实际上是说,关键1不存在于你正在寻找的对象。假定是maps,因为您正在尝试解引用maps[j]-并且j不是maps中的键之一。因为它不能被获取,如果你这样做,它将是None,你不能向它添加任何东西。

这里不能给出一个明确的解决方案,因为它不清楚你想以什么结束。给定[1,2,3,5,7]的输入数组,您期望maps在此函数结束时看起来像什么?

有一件事可能会有帮助,比如:

if i not in maps.keys():
ls = maps.get(j, [])
ls.append(nums[i])
maps[i] = ls

在这里,我们获得索引j的列表,如果j不在映射中,则返回默认的空列表[]。然后将修改后的列表赋值给键i。我不确定这是否真的是你要找的,虽然。

相关内容

  • 没有找到相关文章

最新更新