#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
Теперь у меня должно быть два словаря, ключами которых являются поля «id» из двух CSV. То, что я хочу сделать, это взять все из 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)
Ответ №2:
Я не думаю, что для этого есть встроенная функция. Итак, вам нужно будет сделать что-то вроде
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. Ах, шары, я так и думал. =/ Я попробую вашу функцию и посмотрю, как она работает 🙂
Ответ №3:
Я полагаю, что для этого вы можете использовать defaultdict в модуле collections . http://docs.python.org/library/collections.html#collections.defaultdict
Я думаю, что примеры довольно близки к тому, что вы хотите.