Я выяснил, где проблема.
Я загрузил некоторые расширения, чтобы добавить в FirefoxProfile, который я использую, чтобы создать экземпляр FireFoxDriver. Эти плагины расположены в Java / main / resources. В Eclipse все работало нормально, но я не мог получить доступ к этим плагинам через Maven. После копирования этих файлов во временную папку и загрузки их оттуда он работал даже с Maven.
Спасибо за вашу помощь
d = {'key':'value'}
print(d)
# {'key': 'value'}
d['mynewkey'] = 'mynewvalue'
print(d)
# {'mynewkey': 'mynewvalue', 'key': 'value'}
Я думаю, что также было бы полезно указать на модуль 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]})
Добавление элемента автоматически инициализирует список.
Вот иначе, что я не видел здесь:
>>> 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}
>>>
Вышеупомянутое использует понимание словаря.
Для одновременного добавления нескольких ключей:
>>> 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}
Для добавления одного ключа принятый ответ требует меньше вычислительных затрат.