2014-09-19 2 views
0

Я по существу читаю в CSV-файле и создаю объект под названием «Город», который создается с использованием атрибутов, переданных конструктору «city_constructor». Редактировать: файл имеет информацию «Город» на каждой строке. У меня есть Dict из dicts, которые я изо всех сил, чтобы обновить, который принимает в ключевых значений, связанных с 2-х различных классов:Обновление словаря словарей в Python

% d is an iterator obtained from dictReader = csv.DictReader(placesFile) 
% Defining my dict of dicts called places 
places = {"City":{}, "Country":{}} 

А потом я пытаюсь и добавить новый объект в моей Dict из dicts следующим образом, но это похоже, не работает. Есть ли способ сделать это ?:

for d in dictReader: 
    new_City = city_constructor(d["Population"],d["Area"]) 
    places.update({"City":new_City}) 
+0

Почему вы не просто делать 'места [«Город»] = new_City '? – shaktimaan

+0

Предоставление выборки из двух разных '' new_City'', а ожидаемое окончательное содержание '' places'', вероятно, поможет вам понять вашу собственную проблему и помочь нам помочь вам. Есть несколько элементов, которые остаются для интерпретации, и я сильно подозреваю, что даже название вопроса неверно. – vaab

ответ

2

Вы должны быть в состоянии обновить places словарь с:

places["City"] = new_City 

Если у вашего файла есть информация о «Сити» на каждой строке, то я предполагаю, что вы будете делать new_City = city_constructor(d["Population"],d["Area"]) на каждой строке. В этом случае ваш places должен быть как:

places = {"City":[], "Country":[]} 

А вы бы обновить его, как:

for d in dictReader: 
    new_City = city_constructor(d["Population"],d["Area"]) 
    places["City"].append(new_City) 

Если он должен быть ДИКТ из dicts, то ваш places должен быть структурирован что-то вроде:

{ 
    "City": { 
     "City_1": <city_constructor(d["Population"],d["Area"]) of first line>, 
     "City_2": <city_constructor(d["Population"],d["Area"]) of second line>, 
     "City_3": <city_constructor(d["Population"],d["Area"]) of third line>, 
    } 
} 

То есть должен быть новый ключ, связанный с каждой строкой, в которой встречается новый город. Может быть что-то вроде этого:

count = 0 
for d in dictReader: 
    new_City = city_constructor(d["Population"],d["Area"]) 
    _a_dict = {'City_{}'.format(count):new_City} 
    count += 1 
    places["City"].update(_a_dict) 
+0

Спасибо. Тем не менее, мне все еще нужны «места» в качестве диктата диктов, как это не является списком списков? – user131983

+0

Что вы ожидаете от ключа, для каждого нового города на каждой линии? Будет список, участвующий в переменной 'places', так как есть несколько вхождений городов (по одной для каждой строки файла). – shaktimaan

+0

Большое спасибо. Могу я просто спросить, какова цель «подсчета»? – user131983

1

Для обновления одного ключа, вы должны использовать вместо этого:

places["City"] = new_City 
+0

Спасибо. Тем не менее, мой файл имеет информацию «Город» в каждой строке, как сказал пользователь Shaktimaan. – user131983

1
for d in dictReader: 
    new_City = city_constructor(d["Population"],d["Area"]) 
    try: 
     places["City"].append(new_City) 
    except KeyError: 
     places["City"] = [new_City] 

по крайней мере, я думаю ... если предположить, я понимаю, что вы просите

Смежные вопросы