[英]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.