2014-04-10 2 views
2

사전을 반환하는 함수가 있는데 그 함수를 반복합니다. 그러면 사전 목록이 생성됩니다. 이것을 사전으로 변환하고 싶습니다. _myfunction를 호출하는 방법 (거기에파이썬 목록에서 이해를 통한 사전 변환

y = {'one': {'two':'2'}, 'three' : '3', 'four':'five', 'six':{'seven':7}} 

: 말 X의 결과

x = [_myfunction(element) for element in list_of_elements] 

: :이처럼 내 함수를 호출하고

x = [{'one': {'two':'2'}, 'three' : '3'}, {'four':'five', 'six':{'seven':7}}] 

나는 Y로 변환 할)를 list_of_elements 위로 가져 가면 y라는 결과를 직접 얻을 수 있습니까? 아마도 위의 목록 이해 대신 사전 이해력이있을 수 있습니까? 또는 x를 y로 바꾸는 가장 간결한 코드. (희망 지루한되는 및 루프를 사용하지 않고 :-)!) labjunky

감사합니다,

+2

'y'는 사전의 * 튜플 *이 아니며 거의 개선되지 않았습니다. 대신에 "one", "three", "four"및 "six"키를 사용하여 * 사전을 하나 갖고 싶습니까? –

+0

원하는 'y'는 사전이 아니며 2 개 요소 (2 개의 사전)의 튜플입니다. – Christian

+0

하나의 사전이 정말로 필요하다면 두 개의 (또는 그 이상의) 사전에 하나의 키가 나타날 때 당신이하고 싶은 것을 말해야 할 것입니다. – Dunno

답변

2

당신은 dict.update 방법을 사용하여 dicts 병합 할 수 있습니다 :

y = {} 
for element in list_of_elements: 
    y.update(_myfunction(element)) 

당신은 또한 사용할 수 있습니다를 (더블 루프) DICT-이해 :

y = { 
    k:v 
    for element in list_of_elements 
    for k,v in _myfunction(element).items() 
} 

마지막으로, 당신은 두 dicts을 병합, this question에 대한 답변 중 하나를 사용할 수 (그리고그것을 이름을 경우), 이상의 두 가지를 병합 reduce를 사용할 수 있습니다

dicts = [_myfunction(element) for element in list_of_elements] 
y = reduce(merge_dicts, dicts, {}) 

어느 쪽이든을 반복 DICT 키의 경우, 나중에 키는 이전의 것들을 덮어 씁니다.