Вложенный словарь в дизайне хорошо? - PullRequest
4 голосов
/ 19 февраля 2010

Мои данные структурированы таким образом, что я создал вложенный словарь в своем дизайне, например:

my_dict = {"a": {"b": {"c":"I am c"}}}   
my_dict["a"]["b"]["c"]

Это обычно!или у нас есть другие лучшие альтернативы (используя объекты!)?

Ответы [ 5 ]

8 голосов
/ 19 февраля 2010

Вы можете использовать кортеж для хранения ваших значений в плоском словаре:

d = {}
d[a, b, c] = e

Все зависит от того, что вы делаете, но помните, что Дзен Python говорит, что квартира лучше, чем вложенная :) 1006 *

7 голосов
/ 19 февраля 2010

В вложенных диктантах нет ничего плохого.Любое может быть значением dict, и оно может иметь смысл, если оно является единым целым.

В большинстве случаев, когда люди делают вложенные дикты, их проблемы могут быть решены немного легче, если использовать dict с кортежами.для ключей.Вместо доступа к значению как d[a][b][c], тогда к значению будет обращаться как d[a, b, c].Это часто проще в настройке и работе.

1 голос
/ 19 февраля 2010

Поначалу они могут показаться хорошей идеей, но обычно вам нужно больше информации / функциональности от них.Если это произойдет, ваша первая реакция может быть «мне нужно больше хэшей», но всего этого можно избежать, используя более простую иерархию ... это тоже будет проще.

0 голосов
/ 19 февраля 2010

Может быть, с одним вложенным словарем все в порядке ... но даже тогда вы просите запутаться позже, и есть очень хороший шанс, что если вы уже делаете вложенные вещи, вам понадобится больше информации позже.1001 *

В общем, я бы сказал, сделайте шаг назад и посмотрите, нужна ли вся эта информация в словарях.Попробуйте сначала упростить это.Если бы это действительно было необходимо, я бы попробовал сделать для этого простой урок.Может быть, немного излишним, но, как я уже сказал, если вы уже идете по этому пути, вы, вероятно, в конечном итоге добавите больше информации позже.Изменить класс легче, чем попытаться выяснить всю эту вложенную информацию и заставить ваш код работать с ней позже.

0 голосов
/ 19 февраля 2010

Я бы не стал создавать сложные структуры данных в самом коде.Существует слишком большой риск ошибиться с пунктуацией, и любой, кто читает код, может запутаться в этом.Гораздо лучше поместить ваши постоянные данные в простую форму, без вложения структур данных.Затем, если вам нужно иметь вложенный словарь в приложении, создайте его с помощью кода.

a = {"a":"I am a"}
b = {"b":"I am b"}
c = {"c":"I am c"}
mydict = {}
mydict["a"] = a
mydict["b"] = b
mydict["c"] = c
print mydict

{'a': {'a': 'I am a'}, 'c': {'c': 'I am c'}, 'b': {'b': 'I am b'}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...