2016-03-30 3 views
-1

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

выборочные значения

source: something.txt 
    suspicious_key: GFATGTFBFD 
     startPos: 23 
     endPos:32 

какие изменения после этого является добавление нового suspicious_key, startPos и endPos для того же документа

source: something.txt 

    suspicious_key: GFATGTFBFD 
     startPos: 23 
     endPos:32 

    <<<<Second entry under same key>>>> 

    suspicious_key: GKDTFSFSAS 
     startPos: 32 
     endPos:45 

dictionary[source] = {suspicious_key: {"startPos":index_start, "endPos": index_end}} 

я хочу добавить еще один набор значений в соответствии с тем же источником подозрительный ключ, startPos, endPos

Я пробовал с update(), но, похоже, не был wo гк.

dictionary[source].update({suspicious_key: {"startPos":index_start, "endPos": index_end}}) 

Как это сделать?

+0

Итак, откуда вы знаете, что 'dict.update()' "похоже не работает?" Какой результат вы ожидаете, и что вы получили вместо этого? –

ответ

1

Ваш dict.update() обновляет неправильный словарь; он эффективно делает точно то же самое как присвоение одному suspicious_key ключ.

Обновление словаря в suspicious_key ключевые ссылки вместо:

dictionary[source][suspicious_key].update({"startPos":index_start, "endPos": index_end}) 

Если этот ключ может отсутствовать, используйте метод dict.setdefault() вставить пустой словарь для вас:

dictionary[source].setdefault(
    suspicious_key, {}).update(
    {"startPos":index_start, "endPos": index_end}) 

Теперь startPos и Клавиши endPos будут добавлены во вложенный словарь, вместо того чтобы полностью заменить вложенный словарь.

+0

да, но таким образом ключ должен быть таким же, если я правильно понимаю, не так ли? в моем случае я хочу добавить новые подозрительные_имя, startPos, endPos не только startPos, endPos. Подозрительный_key никогда не будет отсутствовать, но он будет отличаться от предыдущего –

+0

@PetrosKyriakou: пожалуйста, * добавьте образец ввода и вывода * на свой вопрос, тогда, потому что неясно, чего вы ожидаете. С некоторыми примерами ввода и вывода я могу даже создать вам небольшую демонстрацию различий. –

0

Вам не нужен список объектов, хранящихся в словаре?

Я предполагаю, что для каждого источника вы хотите получить кучу объектов, идентифицированных подозрительным_key.

добавляя первый пункт:

dictionary[source] = [{suspicious_key: {"startPos":index_start, "endPos": index_end}}] 

тогда, когда вы хотите добавить следующие пункты:

dictionary[source].append({suspicious_key: {"startPos":index_start, "endPos": index_end}}) 

в результате вы, когда вы просите словарь [источник] вы получите список объектов ,

+0

Спасибо за ваш вклад, теперь я получаю это, но объект «dict» не имеет атрибута «append» –

+0

метод append создается из объекта списка, который хранится в словаре –

Смежные вопросы