2012-06-16 3 views
2

다음과 같은 루프를 작성하는 더 좋은 방법이 있습니까?파이썬에서리스트 이해력을 줄이는 것

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) val1의 val2, 그래프의 [key] 노드 세트의 키의 경우 NameError : 글로벌 이름 'key'가 정의되어 있지 않습니다. ' – beoliver

+0

@ThemanontheClaphamomnibus : 내 대답에서 해결책을 시도하십시오. 문제는 실제로 루프의 순서입니다. 'my_set_of_keys'와'my_dict'가 정의되고 올바른 타입을 가지고 있다면 이것은 작동해야합니다. – Tadeck

+1

최대한 빨리 받아 들일 것입니다. 그 명령은 나에게 오래 동안 던져주고있다! 그것은 아직도 나의 눈에서 거꾸로있다. .. 그러나 일한다! – beoliver

관련 문제