Я хочу создать структуру данных с вложенными словарями и дублирующими ключами. Подробный пример:Как создать вложенные словари с дублирующимися ключами в python
data['State1']['Landon']['abc Area'] = 'BOB'
data['State1']['Landon']['abc Area'] = 'SAM'
data['State1']['Landon']['xyz Area'] = 'John'
data['State2']['New York']['hjk Area'] = 'Ricky'
for z in data['State1'].keys() ,
# I should get list ['Landon', 'Landon', 'Landon']
for y in data['State1']['Landon'].keys() ,
# I should get list ['abc Area', 'abc Area', 'xyz Area']
В настоящее время для хранения данных я использовал дополнительный счетчик ключ
data = Autovivification()
data[state][city][area][counter] = ID
Но при анализе общих записей (дубликаты, а) из города/региона, я должен использовать вложенное петли до счетчика.
for city in data['State1'].keys():
for area in data['State1'][city].keys():
for counter in data['State1'][city][area].keys():
for temp in data['State1'][city][area][counter].values():
cityList.append(city)
areaList.append(area)
Для вложенных словарей, я нашел следующий код, отправленный nosklo
class AutoVivification(dict):
"""Implementation of perl's autovivification feature."""
def __getitem__(self, item):
try:
return dict.__getitem__(self, item)
except KeyError:
value = self[item] = type(self)()
return value
и словарь с повторяющимися ключами, я нашел код, отправленный Scorpil
class Dictlist(dict):
def __setitem__(self, key, value):
try:
self[key]
except KeyError:
super(Dictlist, self).__setitem__(key, [])
self[key].append(value)
как объединить Autovivification и Дублировать код класса? или существует ли какой-либо другой питонический способ обработки такого сценария?
Можете ли вы объяснить, почему вам нужно дубликаты ключей? Это нормально, если будет отображаться «Area», где вы можете добавить несколько идентификаторов? –
@germn: Я отредактировал вопрос с большим количеством объяснений, можете ли вы проверить – Aniketan
Я обновил ответ, добавив новую функцию 'items_in', которая вернет вам список для данных. Я уверен, что было бы проще и понятнее реализовать функции для работы с структурой dict/list, а затем попытаться реализовать вашу новую структуру. –