2013-01-03 45 views
0

短版本:如何獲取對象屬性的子集作爲Python字典?

在Python是有辦法(乾淨/優雅的),說:「給我這5個(或然而,許多)一個對象的屬性,沒有別的,因爲字典」?

加長版:

使用JavaScript庫下劃線,我可以減少對象/字典的一串(在JS它們是相同的東西)一堆像這樣它們的屬性的子集:

var subsets = _(someObjects).map(function(someObject) { 
    _(someObject).pick(['a', 'd']); 
}); 

如果我想要做一個Python對象(不是字典)同樣的事情,但它似乎像我所能做的最好是使用列表理解和手動設置每個屬性:

subsets = [{"a": x.a, "d": x.d} for x in someObjects] 

當只有兩個屬性時,這看起來並不那麼糟糕,它們都是一個字母,但如果我開始擁有更多/更長的屬性,它會變得更快(當我編寫多行列表時理解)。我可以把整個事情轉化爲一個使用for循環的函數,但在我這樣做之前,是否有任何很酷的內置Python實用工具,我可以用它來完成乾淨(甚至更乾淨)的工作,比JS版?

回答

2

這可以簡單地通過組合a list comprehension with a dictionary comprehension完成。

subsets = [{attr: getattr(x, attr) for attr in ["a", "d"]} 
      for x in someObjects] 

當然,你可以蒸出的是理解,如果你想:

def pick(*attrs): 
    return {attr: getattr(x, attr) for attr in attrs} 

subsets = [pick("a", "d") for x in someObjects] 
相關問題