簡體   English   中英

使用Lambda從字典列表中刪除dict元素

[英]Remove dict element from list of dicts using lambda

python的新功能:

我正在嘗試創建一個新列表,其中初始列表中的每個字典都刪除了一個元素,該元素存在:

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)

我知道我可以使用for 使用 del。 但是我正在尋找新的東西。

使用列表理解:

In [26]: [{x:d[x] for x in d if x != 'y'} for d in arraylist]
Out[26]: [{'x': 1}, {'x': 3}, {'x': 5}, {'x': 33}, {'x': 1}]

您可以使用這樣的過濾器

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: dict(filter(lambda (k,v): k != "y", d.iteritems())), arraylist)

您不能在lambda函數中使用del ,因為del是一條語句,而lambda的主體只能是單個表達式。 您不能在表達式中放入語句。 您可以使其與普通函數一起工作:

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

請注意,像這樣使用del會適當地修改字典d 這意味着返回修改后的字典(並使用返回值構建新列表)是多余的。 詞典所來自的原始數據結構將已經具有修改后的版本。

也許它不是最短的方法,但絕對是從列表中刪除項目的便捷方法:

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}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM