python - 稍微修改一个复制的字典
问题描述
我有以下格式的字典:
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}
非常感谢提前
解决方案
您链接到的代码将不起作用。如果您花几秒钟时间尝试一下,您会发现该语法仅用于修改字典中的键 - 您可以添加键或覆盖键。您要做的是修改每个字典中的键值。有几种方法可以做到这一点,在这个简单的示例字典中进行了演示:
>>> 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}]
推荐阅读
- python - Python中的矩阵乘积
- javascript - MongoDB 在调用字符串中与 int 进行比较
- python - Django 不会连接到远程 RDS
- wordpress - Cpanel 无法识别 wordpress 类别和标签
- python - 从字典中获取列表中元素的 True 或 False 值
- python - 如何在tensorflow中为tf.bincount创建梯度函数
- java - Idea Intellij:无法增加堆大小
- javascript - 对象作为 JavaScript 中的模型
- javascript - 将组件嵌套在另一个组件中而不将其嵌套在路由中
- bash - 从包含匹配模式的起始行和结束行的文件中读取行,并将其附加到 bash 中的另一个文本文件