【发布时间】:2015-11-02 14:25:32
【问题描述】:
假设我们有一个这样的字典列表:
l = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}, {'a': 5, 'b': 6}]
我想将每个 a-key 的值加一。使用这样的循环很容易实现:
for dictionary in l:
dictionary['a'] += 1
但是是否也可以通过结合使用 map 和 lambda 来做到这一点?它必须是这样的:
l = map(lambda x: x+1, l)
但我不知道如何在 lambda 中指定 a-key。 lambda x['a'] 没用。有什么建议吗?
提前致谢!
【问题讨论】:
-
可能不是一个好主意。如果您想要的只是改变字典的副作用,为什么还要创建一个列表?这很浪费内存。看到这个:stackoverflow.com/q/14633298/4996248
-
为什么要在这里使用
map?这个问题可以用命令式的方式很容易地解决(你的例子是for),但是使用函数式范式需要对持久数据结构的强大支持,而Python没有。简而言之:您必须复制每个字典并替换其中的一个值,而不是更改每个字典的一个值。看起来不像 Pythonic 方式 -
map(lambda x:x['a']+1 , l) 打印 l
-
这更像是一种理论游戏,没有考虑到有用的应用程序。但是 map(lambda x:x['a']+1 , l) print l 不起作用。它仅返回更新条目的列表,即 [2, 4, 6]。我想要这样的列表: [{'a': 2, 'b': 2}, {'a': 4, 'b': 4}, {'a': 6, 'b': 6}]
标签: python dictionary lambda