python-3.x - python [if key in dict] 在没有 break 语句的情况下无法工作
问题描述
所以,我有一个字典 {d},它有大约 200,000 个数据。d.key是一个字符串,d.value是一个有 2 个字符串的元组。
d = {id1:(parentId1,name1), id2:(None,name2), id3:(parentId3,name3), ... }
如果 parent 不存在,则 parentId=None。我有一个包含大约 1000 个数据的列表。结构如下:
alist =[ [id1,parentId1,name1],[id2,parentId2,name2],[id3,parentId3,name3], ...]
我想改变 alist 中的名称,使其包含基于 parentId 的层次结构路径。当我执行以下代码时:
for a in alist:
parentId = a[1]
while parentId:
if parentId in d:
a[2] = d[parentId][1] + '/' + a[2]
parentId = d[parentId][0]
它永远运行。我检查了 print 语句,下面的代码 [if parentId in d] 从未运行。但是,如果我这样写一个 break 语句:
i=0
for a in alist:
parentId = a[1]
while parentId:
if parentId in d:
a[2] = d[parentId][1] + '/' + a[2]
parentId = d[parentId][0]
i=i+1
if i > 200000:
break
有用。为什么?
解决方案
如果我是你我的朋友。我会删除该行while parentId:
。
并且if parentId in d:
只使用。
祝你好运!
推荐阅读
- llvm - 从 LLVM,我如何确定架构的最大对齐?
- python - 在while循环中创建熊猫数据框,异常处理后不读取数据框
- javascript - 显示更多/显示更少按钮 - 修复新内容放置的工作方式
- c++ - 内部 for 循环时间复杂度
- javascript - 为什么这个 Promise 会跳过 forEach 循环
- python - 为什么我的旧列表会更改,即使两者的 ID 不同?
- python - multiprocessing.Pool 和 slurm
- javascript - React:番茄钟:如何转换为`MM:SS`?
- javascript - 动态创建的画布无法识别/不可操作
- neo4j - Neo4J apoc.create.vRelationship 独特的关系ip