给定一个包含字典列表的 default 和一个字典 varying,其中每个字典都有相同的键。目标是创建一个新的字典列表,通过改变 default 中字典的某个值及其在 varying 中对应的值来实现。例如,如果 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]}, 那么结果列表将包含以下字典:
- {"One": 12, "Two": 2, "Three": 3}
- {"One": 13, "Two": 2, "Three": 3}
- {"One": 14, "Two": 6, "Three": 7}
- {"One": 15, "Two": 10, "Three": 11}
- {"One": 5, "Two": 20, "Three": 7}
- {"One": 9, "Two": 23, "Three": 11}
- {"One": 1, "Two": 2, "Three": 44}
2、解决方案
方法一:使用列表解析
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]
print(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}]
方法二:使用循环
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 = []
for d in default:
for k, v in varying.items():
for x in v:
new_dict = dict(d)
new_dict[k] = x
result.append(new_dict)
print(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}]