python - 如何在不创建新字典的情况下更新字典?
问题描述
此问题指定字典和整数列表作为参数传递给函数,该参数应该通过删除整数列表中的列表值中的整数元素来更新字典。在这种情况下,整数列表 [2, 5] 被传递并与字典值进行比较。
例如,给定字典:
1. {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}
更新后:
2. {3: [3, 7, 4], 7: [6, 1], 2: [1, 8, 0], 8: [-3, 9]}
请注意,列表值已删除所有 2 和 5,因为整数列表 [2, 5] 是参数之一。
如果我不返回字典,它会返回 None,但我也不能直接返回原始字典,因为它返回完全相同的字典,没有删除任何整数。我还尝试创建一个新字典并使用 items 方法再次附加所有内容,但删除了一些整数,但这也没有返回更新的字典。
编码:
def main():
a_dict = {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}
print("1.", a_dict)
updated = update_corresponding_values(a_dict, [2, 5])
print("2.", updated)
def update_corresponding_values(a_dict, list1):
for value in a_dict.items():
if value in list1:
del a_dict[value]
main()
预期的:
1. {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}
2. {3: [3, 7, 4], 7: [6, 1], 2: [1, 8, 0], 8: [-3, 9]}
得到:(如果我返回一些东西)
1. {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}
2. {3: [3, 7, 4], 7: [6, 1, 2, 5, 5, 2], 2: [2, 1, 8, 0], 8: [-3, 9, 5]}
解决方案
我认为你的update_corresponding_values
功能在几个方面是不正确的。例如, updated 应该是None
,假设函数什么都不返回,它只是改变了a_dict
对象。其次,O 认为 if 语句永远不会触发,因为 value 是一个 tuple (key,value_list)
,所以它基本上是检查 ifkey == [2,5]
或value_list == [2,5]
。
尝试:
def update_corresponding_values(a_dict, list1):
for key in a_dict.keys():
new_list = []
for value in a_dict[key]:
if value in list1:
continue
new_list.append(value)
a_dict[key] = new_list
return a_dict
推荐阅读
- typescript - 使用 focus() 函数关注下一个表单输入
- python-3.x - 适用于 Python 和 AWS Lambda 的 Google Cloud Platform API 不兼容:无法导入名称“cygrpc”
- phpmyadmin - 如何隐藏缺少 phpmyadmin 警告?
- gcc - gcc 可能()不太可能()宏和汇编代码
- html - 锚链接破坏定位
- python - Python 字典值在 list.clear() 之后被删除
- javascript - Javascript:Math.round() 每 0.25?
- sql - 显示 GDP 比任何国家都高的国家的代码
- spring-cloud - 使用 Spring Cloud Config 未获得加密值?
- javascript - Zlib 无法解压 utf8 编码的字符串