循环浏览字典的第1+3级



我想知道是否有Python方法可以压缩这个嵌套的for循环:

dict = {
"keyA": { "subkey1": { "A1a": "frog", "A1b": "dog", "A1c": "airplane" } },
"keyA": { "subkey2": { "A2a": "cat" } },
"keyB": { "subkey1": { "B1a": "Zorba", "B1q": ["popcorn", -34] } },
"keyB": { "subkey2": { "B2z": "A Man A Plan A Canal", "B2e": "armadillo", "B2w": [1, 3, "jump"] } },
"keyC": { "subkey1": { "C1a": 3.14, "C1z": { "aaa": "dishwater", "bbb": "Dishwalla" }, "C1x": "bat" } },
"keyC": { "subkey2": { "C2a": None, "C2b": 123 } }
}
for key in dict.keys():
for subsubkey in dict[key]["subkey2"].keys():
print(key+":"+subsubkey)

输出:

keyA:A2a
keyB:B2z
keyB:B2e
keyB:B2w
keyC:C2a
keyC:C2b

解决这一问题的一种Python方法是使用列表理解。这允许您在一行中定义一个列表,遵循您已经布局的for循环结构。工作版本可能看起来像:

final_keys = [(first_key, second_key) for first_key in dict.keys() for second_key in dict[first_key]['subkey2'].keys()]

输出(从数据集(:

[('keyA', 'A2a'), ('keyB', 'B2z'), ('keyB', 'B2e'), ('keyB', 'B2w'), ('keyC', 'C2a'), ('keyC', 'C2b')]

最新更新