2012-10-05 57 views
3

想象一下這樣的對象:正確語法嵌套列表或設置理解

my_obj = { 
    'Episodes' : [ 
     {'Tags' : ['one','two','three']}, 
     {'Tags' : ['three','four','five']} 
      ] 
     } 

我要創建一組標籤:

tags = set(tag for tag in e['Tags'] for e in my_obj['Episodes']) 

但是,這是行不通的,因爲e不定義。我該怎麼做??

+1

看看[這個其他問題](http://stackoverflow.com/questions/3766711/python-advanced-nested-list-comprehension-syntax),它也處理嵌套列表理解語法 – inspectorG4dget

+1

另一個問題是關於比我的問題長50倍。如果我一直在尋找的答案,這個問題,我知道是哪一個,我寧願消化。沒有不敬! – MFB

回答

6
tags = set(tag for e in my_obj['Episodes'] for tag in e['Tags']) 

您需要先更改順序,並得到è... :)

+0

輝煌,歡呼。 – MFB

1

的技巧我使用,以避免這些嵌套的內涵越來越困惑就是擴大循環中出現的順序修真

在你的榜樣

所以,你有一個genex

tag for tag in e['Tags'] for e in my_obj['Episodes']

,你可以精神上擴展到雙循環是這樣的:這個結構,你可以很清楚地

for tag in e['Tags']: 
    for e in my_obj['Episodes']: 
    yield tag 

現在看到你的錯誤就在於,與e是不確定的,並認爲它確實應該:

for e in my_obj['Episodes']: 
    for tag in e['Tags']: 
    yield tag 

其中摺疊回巢理解

tag for e in my_obj['Episodes'] for tag in e['Tags']

正如你已經從以前的答案看出。希望這可以幫助!

+0

這是一個偉大的把戲,謝謝! – MFB