2017-01-18 5 views
0

나는 Python3을 배우고 가르치려고 노력하고 있으며 스크랩 한 웹 데이터를 다시 포맷하려고합니다.Python3 : 다른 사전을 기반으로 목록의 사전에 추가

[{'name' : 'Anna', 'gender': "f", 'ID': 512128, 'age' : 28}, 
{'name' : 'Barney', 'gender': "m", 'ID': 012428, 'age' : 29}, 
{'name' : 'Cesar', 'gender': "m", 'ID': 032536, 'age' : 57}] 

내가 다른의 정보를 포함하는 추가 필드 이름 '동료'를 갖는 모든 사전과 사전의 목록을 달성하기 위해 싶습니다

입력 사전의 목록입니다 목록에있는 사전.

원하는 출력 : 당신이 말할 수

[{'name' : 'Anna', 'gender': "f", 'ID': 512128, 'age' : 28, 'colleagues' : [{'name' : 'Barney', 'gender': "m", 'ID': 012428, 'age' : 29}, {'name' : 'Cesar', 'gender': "m", 'ID': 032536, 'age' : 57}]}, 
{'name' : 'Barney', 'gender': "m", 'ID': 012428, 'age' : 29, 'colleagues' : [{'name' : 'Anna', 'gender': "f", 'ID': 512128, 'age' : 28}, {'name' : 'Cesar', 'gender': "m", 'ID': 032536, 'age' : 57}]}, 
{'name' : 'Cesar', 'gender': "m", 'ID': 032536, 'age' : 57, 'colleagues' : [{'name' : 'Anna', 'gender': "f", 'ID': 512128, 'age' : 28}, {'name' : 'Barney', 'gender': "m", 'ID': 012428, 'age' : 29}]}] 

, 내가 파이썬에 새로운 오전하지만 .. 등 간단한 이해와 루프에 대한 이해 나는 가능한 모든 시도를 매우 중첩 루프와 마지막 밤을 보냈다 구조 - 무한 루프가 발생했습니다.

전문가 중 한 명이 그 작업에 어떻게 접근 할 수 있는지 알려 주시면 감사하겠습니다. 감사합니다! 감사합니다!

답변

1
output = [dict([*p.items(), 
       ['colleagues', [q for q in input if p != q]] 
       ]) for p in input] 

세트 및 inputset - set(p)을 사용하면 속도를 향상시킬 수 있습니다.

전체 dict([*p.items(), [k, v]])은 문장을 사용하지 않고도 별도의 키 - 값 쌍을 사용하여 새로운 사전을 만들기위한 해킹과 비슷합니다.

def dict_with_new_pair(d, k, v): 
    from copy import copy 
    c = copy(d) 
    c[k] = v 
    return c 

편집 : 그것은 주어진 dict_with_new_pair(p, k, v)에 거의 동일합니다 당신이 말했듯이, 모두 pqinput의 요소입니다. 표현은 다음과 같이 구문 분석 : input에있는 모든 사람 p를 들어, 값이 될 것입니다 p이 아닌 모든 사람 input에서 q (그러한 모든 목록을 수집 새로운 목록 outputp 농축), 키 colleagues 함께 풍부.

+0

놀라운, 내 문제를 해결, 감사합니다! 나는 어떻게 코드가 작동하는지 궁금해.리스트 목록은 입력리스트의 사전들을 반복하며, 당신은 dict ([* p.items(), [k, v]])가하는 일을 설명했다. if 조건과 p와 q가 무엇을 나타내는 지 설명 할 수 있습니까? 둘 다 입력 요소가되는 것 같습니다. 도와 주셔서 다시 한 번 감사드립니다! –

관련 문제