То, как я делаю, усовершенствовало хеш Python autovivification?

Этот вопрос о реализации полного Perl autovivification в Python. Я знаю, что подобные вопросы задали, прежде и до сих пор лучший ответ находится в, "Что лучший способ состоит в том, чтобы реализовать вложенные словари в Python?". Однако я надеюсь делать это:

a['x']['y'].append('z')

без объявления a['x']['y'] = [] во-первых, или скорее не объявление a['x'] = {} также. (Отметьте в Perl, который можно сделать push @{$a->{x}{y}}, 'z';.)

Я знаю dict и list вид классов не смешивается, таким образом, это твердо, но я интересуюсь наблюдением, если у кого-то есть оригинальное решение, вероятно, включающее создание наследованного класса от dict но определенный новое append метод на нем?

Я также знаю, что это могло бы отбросить некоторых пуристов Python, которые попросят, чтобы я придерживался Perl. Но, даже только для проблемы, я хотел бы видеть что-то.

10
задан Community 23 May 2017 в 12:01
поделиться

2 ответа

a = collections.defaultdict(lambda: collections.defaultdict(list))
16
ответ дан 3 December 2019 в 18:32
поделиться

Возможно, это решит вашу потребность в любом количестве «Размеры» в вашем словаре:

a= collections.defaultdict(list)

единственное изменение в вашем коде:

a['x', 'y'].append('z')

Конечно, это решение, которое вы хотите, зависит от двух условий:

  1. нужно ли вам легко получить доступ ко всем спискам, например, «x» в «первом измерении»
  2. , придерживаетесь ли вы пути, которым Perl волшебным образом нравится вам больше :)

Если хотя бы одно из этих двух условий верно, мое решение вам не поможет.

2
ответ дан 3 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: