使用lambda从dicts列表中删除dict元素

时间:2017-01-31 08:36:06

标签: python lambda

这里是python的新手:

我正在尝试创建一个新列表,其中每个初始列表中的dict都删除了一个元素,它存在:

arraylist = [{"x":1, "y":2}, {"x":3, "y":2}, {"x":5, "y":2}, {"x":33, "y":2}, {"x":1, "y":8}]
arraylist = map(lambda d: del d["y"] if "y" in d, arraylist)

我知道我可以使用用于使用 del来实现。但我正在寻找新的东西。

4 个答案:

答案 0 :(得分:4)

使用列表理解:

Content

答案 1 :(得分:2)

您可以使用此类过滤器

int year=2017;
int month=02;
int day=01;
int hour=11;
int minutes=30;
String format="AM";

DateTime datetime = DateTime.ParseExact($"{month}/{day}/{year} {hour}:{minutes}:00 {format}",
             "M/d/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

答案 2 :(得分:0)

您无法在del函数中使用lambda,因为del是一个语句而lambda的正文只能是一个表达式。您不能在表达式中放置语句。你可以使用普通函数:

def delete_y(d):
    if "y" in d:
        del d['y']
    return d

请注意,使用此类del会修改字典d。这意味着返回修改后的字典(并使用返回值来构建新列表)有点多余。字典来自的原始数据结构已经具有修改版本。

答案 3 :(得分:0)

也许它不是最短的方式,但它绝对是一种方便的删除方式 列表中的项目:

arraylist = [{"x":1, "y":2}, {"x":3, "y":2}, {"x":5, "y":2}, {"x":33, "y":2}, {"x":1, "y":8}]

print arraylist

def containsY(d):
    if 'y' in d.keys():
        del d['y']
        return True
    return False

filter(containsY, arraylist)

print arraylist

输出:

[{'y': 2, 'x': 1}, {'y': 2, 'x': 3}, {'y': 2, 'x': 5}, {'y': 2, 'x': 33}, {'y': 8, 'x': 1}]
[{'x': 1}, {'x': 3}, {'x': 5}, {'x': 33}, {'x': 1}]
相关问题