Python字典值基于特定键进行合并

时间:2011-10-24 18:09:12

标签: 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 :(得分: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)

答案 1 :(得分: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]

答案 2 :(得分:0)

我相信您可以在集合模块中使用defaultdict。 http://docs.python.org/library/collections.html#collections.defaultdict

我认为这些例子非常接近你想要的。