[英]question about filtering a dictionary using a list in python
具有以下字典和數組:
a = { 'a':[1,2,3,4,5], 'b':[1,2,3], 'c':[1,2,3,4,5] } b = ['a','c']
我想將a過濾到一個新的字典中,以僅將鍵值包含在數組b中,所以我最終得到:
c = {'a': [1, 2, 3, 4, 5], 'c': [1, 2, 3, 4, 5]}
因此,對我來說,顯而易見的方法如下:
(1) dict(map( lambda x:(x,a[x]), b))
尋找不同的方式來做到這一點,我也看到了:
(2) dict( (x, a[x]) for x in b)
我沒有完全掌握(2),但是在我深入研究正在發生的事情之前,使用(2)勝過(1)有優勢嗎? 還是更好,但是有更好的方法嗎?
內置的map()
始終可以由列表理解代替。 通話
map(callable, iterable)
相當於
[callable(x) for x in iterable]
如果callable
是lambda表達式,則后者的形式更快且更具可讀性,這就是在這種情況下首選它的原因。
如果您真的不需要map()
返回的列表,而只需要另一個“可迭代”,則也可以用生成器表達式替換map()
調用
(callable(x) for x in iterable)
這不會立即創建所有項目。 在迭代生成器時,只能一一創建項。
在您的示例中, dict
構造函數僅需要一個可迭代的對象,它將對直接將所有項目插入新dict
實例的插入對象進行迭代。 您不需要列表理解或對map()
的調用將創建的中間列表。
您的選項(2)比(1)更快,使用更少的內存,更簡潔,並且(我認為)比(1)更具可讀性。
使用python 2.7和3.0語法:
{ k:a[k] for k in b }
(2)的優點是它使用生成器來生成鍵值元組,因此可以避免N的方法調用對(1)造成的lambda x()
的開銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.