根据特定键合并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()的功能,但只是追加值,而不是更新。
3 个回答
0
我觉得你可以使用collections模块里的defaultdict来解决这个问题。http://docs.python.org/library/collections.html#collections.defaultdict
我认为里面的例子跟你想要的非常接近。
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]
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)