繁星coding
你想要的是你的字典的笛卡尔积。幸运的是,itertools定义了一个product完全可以做到这一点的函数。当用作可迭代对象时,adict将产生其键,因此product(D1, D2, ...)将直接产生键元组,例如('A', 'D', 'F', ...).您需要进行一些调整才能获得所需的输出:from pprint import pprintimport itertoolsdicts = [ {"A": 1, "B": 3, "C":6}, {"D": 4}, {"E": 8, "F": 12, "G": 2}, {"H": 9, "I": 3}]r = [ {f"D{i}": key for i, key in enumerate(x, 1)} for x in itertools.product(*dicts)]pprint(r)输出:[{'D1': 'A', 'D2': 'D', 'D3': 'E', 'D4': 'H'}, {'D1': 'A', 'D2': 'D', 'D3': 'E', 'D4': 'I'}, {'D1': 'A', 'D2': 'D', 'D3': 'F', 'D4': 'H'}, {'D1': 'A', 'D2': 'D', 'D3': 'F', 'D4': 'I'}, {'D1': 'A', 'D2': 'D', 'D3': 'G', 'D4': 'H'}, {'D1': 'A', 'D2': 'D', 'D3': 'G', 'D4': 'I'}, {'D1': 'B', 'D2': 'D', 'D3': 'E', 'D4': 'H'}, {'D1': 'B', 'D2': 'D', 'D3': 'E', 'D4': 'I'}, {'D1': 'B', 'D2': 'D', 'D3': 'F', 'D4': 'H'}, {'D1': 'B', 'D2': 'D', 'D3': 'F', 'D4': 'I'}, {'D1': 'B', 'D2': 'D', 'D3': 'G', 'D4': 'H'}, {'D1': 'B', 'D2': 'D', 'D3': 'G', 'D4': 'I'}, {'D1': 'C', 'D2': 'D', 'D3': 'E', 'D4': 'H'}, {'D1': 'C', 'D2': 'D', 'D3': 'E', 'D4': 'I'}, {'D1': 'C', 'D2': 'D', 'D3': 'F', 'D4': 'H'}, {'D1': 'C', 'D2': 'D', 'D3': 'F', 'D4': 'I'}, {'D1': 'C', 'D2': 'D', 'D3': 'G', 'D4': 'H'}, {'D1': 'C', 'D2': 'D', 'D3': 'G', 'D4': 'I'}]
回首忆惘然
itertools product是你的朋友:from itertools import productd = {"D1": {"A": 1, "B": 3, "C":6}, "D2": {"D": 4}, "D3": {"E": 8, "F": 12, "G": 2}, "D4": {"H": 9, "I": 3}, "D5": {"J": 2}, "D6": {"K": 8, "L": 1}, "D7": {"M": 2}}res = []for c in product(*(v.keys() for _, v in d.items())): res.append(dict(zip(d.keys(), c)))列表理解版本将是:res = [dict(zip(d.keys(), c)) for c in product(*(v.keys() for _, v in d.items()))]产生:[{'D1': 'A', 'D2': 'D', 'D3': 'E', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'E', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'E', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'E', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'F', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'F', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'F', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'F', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'G', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'G', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'G', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'A', 'D2': 'D', 'D3': 'G', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'E', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'E', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'E', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'E', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'F', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'F', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'F', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'F', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'G', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'G', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'G', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'B', 'D2': 'D', 'D3': 'G', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'E', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'E', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'E', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'E', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'F', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'F', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'F', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'F', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'G', 'D4': 'H', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'G', 'D4': 'H', 'D5': 'J', 'D6': 'L', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'G', 'D4': 'I', 'D5': 'J', 'D6': 'K', 'D7': 'M'}, {'D1': 'C', 'D2': 'D', 'D3': 'G', 'D4': 'I', 'D5': 'J', 'D6': 'L', 'D7': 'M'}]优点和缺点(+)与其他答案不同,这个答案不依赖于模式之后的 subdicts 的命名D<i>;他们可以被称为任何东西。(-) 必须保留 dict 的顺序,因此您需要 Python 3.5+