Python:如何改变字典值的子集?

标签 python dictionary for-loop dictionary-comprehension

我已经创建了一个字典d。我只想更改某种类型的值。例如,我想用字符串的长度替换字符串。

最无聊的方法是使用 for 循环:

for k,v in d.items():
    if isinstance(v, str):
        d[k] = len(v)

但是循环不是很慢吗?
可以通过理解来完成。我认为这相当于上面的:

d = {k: len(v) if isinstance(v, str) else v for k,v in d.items()}

我用 map 尝试过,但这些不起作用(显然是因为我不明白 something about tuple unpacking in Python 3 ):

d = dict(map(lambda k,v: (k, len(v) if isinstance(v, str) else v), d.items()))
d = dict(map(lambda (k,v): (k, len(v) if isinstance(v, str) else v), d.items()))

这似乎有效,但它变得又大又难看:

dict(map(lambda kv: (kv[0], len(kv[1]) if isinstance(kv[1], str) else kv[1]), d.items()))

貌似这种操作很常见,但是我找不到具体的答案。
正确的、Pythonic 的、高性能的方法是什么?

最佳答案

你已经有了答案,CoryKramer 已经提到过。

d = {k: len(v) if isinstance(v, str) else v for k,v in d.items()}

这样就可以了,而且是最干净的方法。

关于Python:如何改变字典值的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49203269/

相关文章:

java - 如何将方法放入 map 中?

php - 用于从 GPS 数据映射路径的 JavaScript 库

Java:输入10个多项选择A、B、C、D并输出数字正确、错误和等级

R 仅在多列重叠的情况下合并数据帧

python - Celery SQS + 任务重复 + SQS 可见性超时

python - 我应该害怕 __init_subclass__ 开始的方式吗?

python - 在 pandas DataFrame 中使用比较列表的问题

c++ - 为 map 赋值的最有效方式

java - 为什么将 ActionListener 添加到 JButton 时,这 2 个类似的 for 循环会产生不同的结果?

python - 尝试通过 SQLite 中的复合主键长列表来选择行