Словари Python-Как сохранить новое значение от перезаписи предыдущего значения? - PullRequest
3 голосов
/ 30 января 2011

Я хочу создать словарь под названием «First» (как в «First Name»), который будет хранить многочисленные имена, которые все хранятся в словаре через функцию. Идея состоит в том, что словарь может поддерживать несколько имен,

так вот моя проблема:

Когда я добавляю имя в словарь, затем я добавляю второе с помощью функции, предыдущее имя перезаписывается последним. Как мне это исправить? Я знаю, что это что-то вроде словаря в словаре или вложенных условных выражений. Вот мой код:

def store(data,value):
    data['Names'] = {}
    data['Names']['first'] = {}
    data['Names']['first'] = {value}

Ответы [ 4 ]

4 голосов
/ 30 января 2011

Включите data['Names']['first'] в список и добавьте к нему:

data['Names'] = {}
data['Names']['first'] = []

def store(data, value):
    data['Names']['first'].append(value)
2 голосов
/ 30 января 2011

Python <2.5 не имеет <code>defaultdict, однако вы можете добиться того же самого с обычным dict.

>>> names = {}
>>> name_list = [('Jon', 'Skeet'), ('Jeff', 'Atwood'), ('Joel', 'Spolsky')]
>>> for first, last in name_list:
        names.setdefault('first', []).append(first)
        names.setdefault('last', []).append(last)
>>> print names
{'first': ['Jon', 'Jeff', 'Joel'], 'last': ['Skeet', 'Atwood', 'Spolsky']}

setdefault возвращает существующее значение, если ключ уже существуетв dict, или устанавливает новое значение и возвращает новое установленное значение, если ключ не существует.

1 голос
/ 30 января 2011

Взгляните на collection.defaultdict . Тогда вы можете делать такие вещи, как:

from collections import defaultdict

data['Names'] = defaultdict(list) # Or pass set instead of list.
data['Names']['first'].append("Bob")
data['Names']['first'].append("Jane")
data['Names']['last'].extend("T", "Mart")
0 голосов
/ 30 января 2011

Вероятно, вы должны хранить список имен в виде списка, а не словаря.Таким образом, вы должны иметь:

data['Names'] = {}
data['Names']['first'] = [] #note the brackets here instead of curlies
data['Names']['first'] = [value1, value2]

Чтобы добавить один после создания экземпляра, вы можете сделать:

data['Names']['first'].append(another_first_name)

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

data['Names']['first'][0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...