Что лучший способ состоит в том, чтобы инициализировать dict dicts в Python? [дубликат]

Проблема не в оболочке. Проблема на самом деле связана с командой echo и отсутствием двойных кавычек вокруг интерполяции переменных. Вы можете попробовать использовать echo -e, но это не поддерживается на всех платформах, и теперь одна из причин printf теперь рекомендуется для переносимости.

Вы также можете попробовать и вставить новую строку непосредственно в свою оболочку скрипт (если скрипт - это то, что вы пишете), поэтому он выглядит как ...

#!/bin/sh
echo "Hello
World"
#EOF

или эквивалентно

#!/bin/sh
string="Hello
World"
echo "$string"  # note double quotes!
79
задан nosklo 16 March 2009 в 19:49
поделиться

4 ответа

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

Тестирование:

a = AutoVivification()

a[1][2][3] = 4
a[1][3][3] = 5
a[1][2]['test'] = 6

print a

Вывод:

{1: {2: {'test': 6, 3: 4}, 3: {3: 5}}}
97
ответ дан nosklo 6 November 2019 в 02:44
поделиться

Существует ли причина, это должен быть dict dicts? Если нет никакого неопровержимого довода той конкретной структуры, Вы могли бы просто индексировать dict с кортежем:

mydict = {('foo', 'bar', 'baz'):1} # Initializes dict with a key/value pair
mydict[('foo', 'bar', 'baz')]      # Returns 1

mydict[('foo', 'unbar')] = 2       # Sets a value for a new key

круглые скобки требуются, если Вы инициализируете dict с ключом кортежа, но можно опустить их при установке/получении использования значений []:

mydict = {}                        # Initialized the dict
mydict['foo', 'bar', 'baz'] = 1    # Sets a value
mydict['foo', 'bar', 'baz']        # Returns 1
13
ответ дан zweiterlinde 6 November 2019 в 02:44
поделиться

Если объем вложения, в котором Вы нуждаетесь, фиксируется, collections.defaultdict замечательно.

, например, вложение два глубоко:

myhash = collections.defaultdict(dict)
myhash[1][2] = 3
myhash[1][3] = 13
myhash[2][4] = 9

, Если Вы хотите пойти другой уровень вложения, необходимо будет сделать что-то как:

myhash = collections.defaultdict(lambda : collections.defaultdict(dict))
myhash[1][2][3] = 4
myhash[1][3][3] = 5
myhash[1][2]['test'] = 6

редактирование: MizardX указывает, что мы можем получить полную степень универсальности с простой функцией:

import collections
def makehash():
    return collections.defaultdict(makehash)

Теперь мы можем сделать:

myhash = makehash()
myhash[1][2] = 4
myhash[1][3] = 8
myhash[2][5][8] = 17
# etc
102
ответ дан Mark Lakata 6 November 2019 в 02:44
поделиться

Я предполагаю, что буквальный перевод был бы:

 mydict = {'foo' : { 'bar' : { 'baz':1}}}

Вызов:

 >>> mydict['foo']['bar']['baz']

дает Вам 1.

, Который смотрит немного общего количества мне, все же.

(я не парень жемчуга, тем не менее, таким образом, я предполагаю то, что Ваш жемчуг делает)

2
ответ дан Dana 6 November 2019 в 02:44
поделиться
Другие вопросы по тегам:

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