使用lambda和map从字典列表中删除键/值

19
我有一个包含相同键的字典列表,例如:
[{k1:'foo', k2:'bar', k3...k4....}, {k1:'foo2', k2:'bar2', k3...k4....}, ....]
我想从列表中的所有字典中删除k1。
我尝试过:
map(lambda x: del x['k1'], list)

但是这给了我一个语法错误。我错在哪里了?

1个回答

42

lambda函数体仅为表达式,不像del一样是语句。

如果你必须使用map和lambda,则:

map(lambda d: d.pop('k1'), list_of_d)

使用for循环可能更清晰:

for d in list_of_d:
    del d['k1']

2
这样做会不会只给我一个'k1'列表?我相信pop返回被移除的值。 - webley
听起来你并不需要使用 map。你不是想从另一个列表中计算出一系列值,而是想对一个列表进行操作。请使用 for 循环代替。 - Ned Batchelder
顺便说一句,map 函数将生成已删除值的列表,但如果您愿意,可以忽略从 map 返回的值。 - Ned Batchelder
抱歉,我误解了你的意思 - 我刚试过了,是的,列表中已经移除了k1。我会采纳你的建议并使用这个列表。 - webley
3
请注意,Python 3 中的 map 函数返回的是 map 对象 而不是列表,因此除非被使用,否则 lambda 表达式将不会被执行 - kirpit
在删除字典中的键之前,我认为您还需要检查该键是否存在。 - prafi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接