default = [{"One": 1, "Two": 2, "Three": 3}, {"One": 5, "Two": 6, "Three": 7},
{"One": 9, "Two": 10, "Three" : 11}]
varying = {"One": [12,13,14,15], "Two": [20,21,23], "Three": [12,44]}
result = [dict(d.items() + [(k, x)])
for d in default for k, v in varying.items() for x in v]
>>> result
[{'One': 1, 'Three': 12, 'Two': 2},
{'One': 1, 'Three': 44, 'Two': 2},
{'One': 1, 'Three': 3, 'Two': 20},
{'One': 1, 'Three': 3, 'Two': 21},
{'One': 1, 'Three': 3, 'Two': 23},
{'One': 12, 'Three': 3, 'Two': 2},
{'One': 13, 'Three': 3, 'Two': 2},
{'One': 14, 'Three': 3, 'Two': 2},
{'One': 15, 'Three': 3, 'Two': 2},
{'One': 5, 'Three': 12, 'Two': 6},
{'One': 5, 'Three': 44, 'Two': 6},
{'One': 5, 'Three': 7, 'Two': 20},
{'One': 5, 'Three': 7, 'Two': 21},
{'One': 5, 'Three': 7, 'Two': 23},
{'One': 12, 'Three': 7, 'Two': 6},
{'One': 13, 'Three': 7, 'Two': 6},
{'One': 14, 'Three': 7, 'Two': 6},
{'One': 15, 'Three': 7, 'Two': 6},
{'One': 9, 'Three': 12, 'Two': 10},
{'One': 9, 'Three': 44, 'Two': 10},
{'One': 9, 'Three': 11, 'Two': 20},
{'One': 9, 'Three': 11, 'Two': 21},
{'One': 9, 'Three': 11, 'Two': 23},
{'One': 12, 'Three': 11, 'Two': 10},
{'One': 13, 'Three': 11, 'Two': 10},
{'One': 14, 'Three': 11, 'Two': 10},
{'One': 15, 'Three': 11, 'Two': 10}]
下面是使用正常的循環,而不是一個列表理解等價的:
result = []
for d in default:
for k, v in varying.items():
for x in v:
result.append(dict(d.items() + [(k, x)]))
需要注意的是Python的3.x的,你需要使用list(d.items())
,而不只是d.items()
。
看看[itertools](http://docs.python.org/2/library/itertools.html)。 –
你在談論跨產品嗎?我只想更改默認字典中的一個元素。組合也不起作用。我無法告訴任何真正適合我想要做的事情。 – kng