首页 > 解决方案 > 稍微修改一个复制的字典

问题描述

我有以下格式的字典:

d = {'K1': [1, 2, 3], 'K2': [4, 5, 6], 'K3': [7, 8, 9]}

我想有这个字典的N个修改副本,其中第n个字典只有列表的第n个元素作为值。

我在 stackoverflow 上发现了这个有用且强大的语法:

new_dict = {**old_dict, 'changed_val': value, **other_new_vals_as_dict}

输出应如下所示(包含 N 个字典的列表),其中第 n 个字典如下所示:

nth_dict = {“K1”:vn}

非常感谢提前

标签: pythonpython-3.x

解决方案


您链接到的代码将不起作用。如果您花几秒钟时间尝试一下,您会发现该语法仅用于修改字典中的键 - 您可以添加键或覆盖键。您要做的是修改每个字典中的键值。有几种方法可以做到这一点,在这个简单的示例字典中进行了演示:

>>> d = {'a':[1,2,3], 'b':[4, 5, 6]}
>>> d
{'a': [1, 2, 3], 'b': [4, 5, 6]}

最直接的方法是对每个索引使用列表推导,并结合字典推导每次重新创建字典。如果您不熟悉列表推导式 google it,它们是 python 的重要组成部分。

>>> [{k:l[i] for k, l in d.items()} for i in range(3)]
[{'a': 1, 'b': 4}, {'a': 2, 'b': 5}, {'a': 3, 'b': 6}]

您还可以将 zip 与元组解包结合使用

>>> [dict(zip(d.keys(), v)) for v in zip(*d.values())]
[{'a': 1, 'b': 4}, {'a': 2, 'b': 5}, {'a': 3, 'b': 6}]

推荐阅读