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

时间:2018-03-09 22:41:56

标签: 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()}

我用地图试了一下,但这些都没有用(显然是因为我不理解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和高效的方式吗?

1 个答案:

答案 0 :(得分:1)

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

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

这样做,并且是最干净的方式。