Добавить новые ключи в словарь?

Я выяснил, где проблема.

Я загрузил некоторые расширения, чтобы добавить в FirefoxProfile, который я использую, чтобы создать экземпляр FireFoxDriver. Эти плагины расположены в Java / main / resources. В Eclipse все работало нормально, но я не мог получить доступ к этим плагинам через Maven. После копирования этих файлов во временную папку и загрузки их оттуда он работал даже с Maven.

Спасибо за вашу помощь

2338
задан kmario23 3 May 2019 в 10:04
поделиться

5 ответов

d = {'key':'value'}
print(d)
# {'key': 'value'}
d['mynewkey'] = 'mynewvalue'
print(d)
# {'mynewkey': 'mynewvalue', 'key': 'value'}
3179
ответ дан 22 November 2019 в 19:55
поделиться

Я думаю, что также было бы полезно указать на модуль Python collections , который состоит из многих полезных подклассов словаря и оберток, которые упрощают дополнение и модификация типов данных в словаре , конкретно defaultdict :

подкласс dict, который вызывает функцию фабрики для предоставления отсутствующих значений

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

>>> from collections import defaultdict
>>> example = defaultdict(int)
>>> example['key'] += 1
>>> example['key']
defaultdict(<class 'int'>, {'key': 1})

, Если ключ еще не существует, defaultdict, присваивает данное значение (в нашем случае 10) как начальное значение к словарю (часто используемый в циклах). Эта операция поэтому делает две вещи: это добавляет, что новый ключ к словарю (согласно вопросу), и присваивает значение, если ключ еще не существует. Со стандартным словарем, это повысило бы ошибку как +=, операция пытается получить доступ к значению, которое еще не существует:

>>> example = dict()
>>> example['key'] += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'key'

Без использования defaultdict, объем кода для добавления нового элемента был бы намного больше и возможно смотрит что-то как:

# This type of code would often be inside a loop
if 'key' not in example:
    example['key'] = 0  # add key and initial value to dict; could also be a list
example['key'] += 1  # this is implementing a counter

defaultdict может также использоваться со сложными типами данных такой как [1 111] и set:

>>> example = defaultdict(list)
>>> example['key'].append(1)
>>> example
defaultdict(<class 'list'>, {'key': [1]})

Добавление элемента автоматически инициализирует список.

1
ответ дан 22 November 2019 в 19:55
поделиться

Вот иначе, что я не видел здесь:

>>> foo = dict(a=1,b=2)
>>> foo
{'a': 1, 'b': 2}
>>> goo = dict(c=3,**foo)
>>> goo
{'c': 3, 'a': 1, 'b': 2}

можно использовать конструктора словаря и неявное расширение для восстановления словаря. Кроме того, интересно, этот метод может использоваться для управления позиционным порядком во время конструкции словаря ( сообщение Python 3.6 ). На самом деле, порядок вставки гарантируется для Python 3.7 и выше!

>>> foo = dict(a=1,b=2,c=3,d=4)
>>> new_dict = {k: v for k, v in list(foo.items())[:2]}
>>> new_dict
{'a': 1, 'b': 2}
>>> new_dict.update(newvalue=99)
>>> new_dict
{'a': 1, 'b': 2, 'newvalue': 99}
>>> new_dict.update({k: v for k, v in list(foo.items())[2:]})
>>> new_dict
{'a': 1, 'b': 2, 'newvalue': 99, 'c': 3, 'd': 4}
>>> 

Вышеупомянутое использует понимание словаря.

0
ответ дан 22 November 2019 в 19:55
поделиться
dictionary[key] = value
87
ответ дан 22 November 2019 в 19:55
поделиться

Для одновременного добавления нескольких ключей:

>>> x = {1:2}
>>> print x
{1: 2}

>>> d = {3:4, 5:6, 7:8}
>>> x.update(d)
>>> print x
{1: 2, 3: 4, 5: 6, 7: 8}

Для добавления одного ключа принятый ответ требует меньше вычислительных затрат.

986
ответ дан 22 November 2019 в 19:55
поделиться
Другие вопросы по тегам:

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