如何从嵌套字典提取指定条件的邮箱?能否避免双层循环?
无需两次迭代的实现方式
情况1:字典结构固定(顶层仅含"contacts"键)
既然明确要处理的是contacts下的联系人数据,完全可以跳过对x.values()的第一层迭代,直接定位到目标子字典,只用一次循环就能完成需求:
for contact_id, info in x["contacts"].items(): if "Owner" in info["role"]: print(info["email"])
这种方式更直接高效,因为我们不需要遍历顶层所有值,直接访问已知的contacts键即可。
情况2:顶层存在多个同类结构的键
如果你的字典顶层可能有多个类似contacts的键(比如还有"employees"等同类结构),可以用itertools.chain把所有子字典的条目合并成一个可迭代对象,实现代码层面的单次循环:
from itertools import chain # 合并所有顶层值对应的子字典条目 for contact_id, info in chain.from_iterable(v.items() for v in x.values()): if "Owner" in info["role"]: print(info["email"])
这里chain.from_iterable会把多个迭代器(每个顶层值的items())合并成一个,代码里只需要写一次for循环。
内容的提问来源于stack exchange,提问作者Hanash Muaz
相关产品推荐
相关产品推荐

