2011-10-24 3 views
1

다음 코드를 사용하여 Python으로 읽은 두 개의 CSV 파일을 병합하고 싶습니다.특정 키를 기반으로하는 Python 사전 값 병합

a = csv.DictReader(csv1) 
b = csv.DictReader(csv2) 

aMap = {} 
bMap = {} 

for row in a: 
    aMap[row['id']] = row 

for row in b: 
    bMap[row['id']] = row 

이제 두 개의 CSV에서 'id'필드가있는 두 개의 사전이 있어야합니다. 내가 원하는 것은 aMap의 모든 것을 가져 와서 해당 키 값에 값을 bMap에 추가하는 것입니다. 예를 들어 aMap에서 사전의 키는

'123456' : {'name': 'SomeName', 'type': 'someType'} 

그리고 bMap은

'123456' : {'location' : 'someLocation'} 

그리고 내가 원하는 것은

'123456' : {'location' : 'someLocation', 'name' : 'SomeName', 'type' : 'someType'} 

이 특정 함수 또는 새 사전을 만들어야합니까? update()와 비슷하지만 업데이트하는 대신 값을 추가하는 것.

답변

1

collections.defaultdict을 사용하고 update을 사용하여 csv2의 행을 병합 할 수 있습니다.

import collections 

aMap = collections.defaultdict(dict) 

for row in csv.DictReader(csv1): 
    aMap[row['id']] = row 

for row in csv.DictReader(csv2): 
    aMap[row['id']].update(row) 
0

거기에 내장 기능이 없다고 생각합니다. 그래서 당신은지도에서 키 값을 삭제하려면

def AppendToValues(from_map, to_map): 
    for key in from_map: 
    to_map[key] = to_map.get(key, {}) 
    to_map.update(from_map.get(key, {})) 

처럼 뭔가를해야 할 것이다 :

del my_map[key] 
+0

아아 볼, 나는 많이 생각했습니다. =/나는 당신의 기능을 줄 것이며 어떻게 움직이는 지 볼 것입니다. :) –