2012-06-16 98 views
2

有沒有更好的方法來編寫以下for循環?在Python中減少列表理解

my_list = [] 
for key in my_set_of_keys: 
    for val1,val2 in my_dict[key]: 
     my_list.append((key,val2,val1)) 

我嘗試或許...有點散漫......

my_list = list(chain.from_iterable(map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]], 
    my_set_of_keys))) 

my_list = reduce(lambda x,y: x+y,(map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]], 
    my_set_of_keys))) 

my_list = reduce(list.__add__, (map(
    lambda key: [(key,val2,val1) for (val1,val2) in my_dict[key]], 
    my_set_of_keys))) 

my_dict看起來是這樣的:

'keyA' : { ('foo',1), ('bar',2), ('baz',3) } 
'keyB' : { ... } 

my_set_of_keys:

{ 'keyA', 'keyC', ... } 

回答

5

這可能爲你工作:

my_list = [(key, v2, v1) for key in my_set_of_keys for v1, v2 in my_dict[key]] 
+0

我曾嘗試過,但我仍然得到。 'nodepaths = [(key,val2,val1)for val1,val2 in graph [key] for keyset in nodeset] NameError:沒有定義全局名稱'key' – beoliver

+0

@ThemanontheClaphamomnibus:試試我的答案。這個問題實際上是循環的順序。如果你有'my_set_of_keys'和'my_dict'定義並且類型正確,這必須工作。 – Tadeck

+1

我會盡快接受。這個命令已經扔了我很久了!它仍然在我眼中倒退......但工作! – beoliver