Python:如何改变字典值的一个子集?
Python: how to mutate a subset of dictionary values?
我已经创建了字典 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 的、高性能的方法?
你已经有了答案,CoryKramer 已经提到了。
d = {k: len(v) if isinstance(v, str) else v for k,v in d.items()}
这样就可以了,而且是最干净的方法。
我已经创建了字典 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 的、高性能的方法?
你已经有了答案,CoryKramer 已经提到了。
d = {k: len(v) if isinstance(v, str) else v for k,v in d.items()}
这样就可以了,而且是最干净的方法。