python - 条件更新字典
问题描述
我正在编写一个代码,该代码给出了一个字典,如下所示:
D = {1: {2: 'a', 3: 'b'}, 10: {11: 'a', 12: 'b'}}
其中 1 和 2 是键,而内部字典 {2: 'a', 3: 'b'} 和 {11: 'a', 12: 'b'} 是应用 1 或 2 相加后的结果。 D[1 ] + 1 = 2 和 D[1] + 2 = 3。“a”和“b”分别表示对 1 或 2 的加法。
从 D 我想继续将这些添加应用到它的新产品中,我可以通过这样做获得:
products = list(set([l for x, y in D.items() for l, m in y.items()]))
products = [2,3,11,12]
我使用一个设置列表只是为了避免对已经在 D 上的产品应用添加。
因此,对产品中的每个项目应用添加并将它们添加到 D 最终会变成这样:
D = {1: {2: 'a', 3: 'b'}, 10: {11: 'a', 12: 'b'}, 2: {3: 'a', 4: 'b'}, 3: {4: 'a', 5: 'b'}, 11: {12: 'a', 13: 'b'}, 12: {13: 'a', 14: 'b'}}
注意新键及其新的内部字典(产品)
问题是我想在一段时间循环中继续对新产品进行此操作,直到获得一个数字。
例如,下一次迭代产品将是:
products = [3,4,5,12,13,14]
如果它们不在 D 中,它们应该用于应用加法,因此可以通过以下方式轻松完成:
for i in products:
if i in D:
products.remove(i)
这将导致我们:
products = [4,5,13,14] # 3 and 12 are already on D
所以我们应该对这些产品应用加法并将它们添加到D
所以我想要实现这一点,必须有类似的东西:
D = {1: {2: 'a', 3: 'b'}, 10: {11: 'a', 12: 'b'}}
i = 0
while i < 4: # just an example of 4 number of iterations
products = list(set([l for x, y in D.items() for l, m in y.items()]))
for j in products:
if j in D:
products.remove(j)
# apply additions
# update D or use an auxiliary dict and them append to D
i +=1
解决方案
那里只有一个变量i
。
您需要for j
在内循环上使用,以避免干扰外循环。
推荐阅读
- javascript - 组合具有相同键值的 JSON 数组
- haskell - 了解单态与多态核心表达式
- html - 如何使用角度动态设置html类或id
- python - Python - 用几个不同的多字符分隔符分割字符串
- android - 添加另一个应用程序后firebase连接丢失
- apache-spark - Pyspark 将包含字符串的 Column 转换为字符串列表并将其保存到同一列中
- javascript - 如何使用 Node 将 process.stdin 作为 Javascript 传递?
- mysql - 使用 django-comments-xtd 发表评论返回 SQL 语法错误
- python - 在 Python3 中读取 .txt 文件时无法加载内容
- openssl - openssl 可以像普通字段一样提示自定义字段吗?