在Python字典创建之后,是否可以向它添加一个键?它似乎没有
1 2 3 4 5 6 | d = {'key':'value'} print(d) # {'key': 'value'} d['mynewkey'] = 'mynewvalue' print(d) # {'mynewkey': 'mynewvalue', 'key': 'value'} |
1 2 3 4 5 6 7 | >>> x = {1:2} >>> print x {1: 2} >>> x.update({3:4}) >>> print x {1: 2, 3: 4} |
我想整合关于Python字典的信息:
创建一个空字典1 2 3 | data = {} # OR data = dict() |
创建一个初始值的字典
1 2 3 4 5 | data = {'a':1,'b':2,'c':3} # OR data = dict(a=1, b=2, c=3) # OR data = {k: v for k, v in (('a', 1),('b',2),('c',3))} |
插入/更新单个值
1 2 3 4 5 6 7 | data['a']=1 # Updates if 'a' exists, else adds 'a' # OR data.update({'a':1}) # OR data.update(dict(a=1)) # OR data.update(a=1) |
插入/更新多个值
1 | data.update({'c':3,'d':4}) # Updates 'c' and adds 'd' |
在不修改原始代码的情况下创建合并字典
1 2 3 | data3 = {} data3.update(data) # Modifies data3, not data data3.update(data2) # Modifies data3, not data2 |
删除字典中的条目
1 2 3 | del data[key] # Removes specific element in a dictionary data.pop(key) # Removes the key & returns the value data.clear() # Clears entire dictionary |
检查一个键是否已经在字典中
1 | key in data |
在字典中遍历对
1 2 3 4 | for key in data: # Iterates just through the keys, ignoring the values for key, value in d.items(): # Iterates through the pairs for key in d.keys(): # Iterates just through key, ignoring the values for value in d.values(): # Iterates just through value, ignoring the keys |
从2个列表中创建一个字典
1 | data = dict(zip(list_with_keys, list_with_values)) |
请随意添加更多!
是的,很简单。只需要做以下事情:
1 | dict["key"] ="value" |
"Is it possible to add a key to a Python dictionary after it has been created? It doesn't seem to have an .add() method."
是的,这是可能的,它确实有一个实现这个的方法,但是你不想直接使用它。
为了演示如何以及如何不使用它,让我们创建一个带有dict文字的空dict,
1 | my_dict = {} |
最佳实践1:下标符号
要用一个新的键和值更新这个dict,可以使用下标符号(请参阅这里的映射),它提供了项分配:
1 | my_dict['new key'] = 'new value' |
1 | {'new key': 'new value'} |
最佳实践2:
我们还可以使用
1 | my_dict.update({'key 2': 'value 2', 'key 3': 'value 3'}) |
1 | {'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value'} |
这样做的另一个有效的方式与关键字参数与更新方法,但由于它们必须是合法的python语言,你不能有空格或特殊符号或启动的名字与号码,但许多人认为这更可读的方式来创建密钥dict,这里我们当然避免创建一个额外的不必要的
1 | my_dict.update(foo='bar', foo2='baz') |
1 2 | {'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value', 'foo': 'bar', 'foo2': 'baz'} |
现在我们已经介绍了三种python方法来更新
还有一种方法可以更新不应该使用的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | >>> d = {} >>> d.__setitem__('foo', 'bar') >>> d {'foo': 'bar'} >>> def f(): ... d = {} ... for i in xrange(100): ... d['foo'] = i ... >>> def g(): ... d = {} ... for i in xrange(100): ... d.__setitem__('foo', i) ... >>> import timeit >>> number = 100 >>> min(timeit.repeat(f, number=number)) 0.0020880699157714844 >>> min(timeit.repeat(g, number=number)) 0.005071878433227539 |
因此,我们看到使用下标符号实际上比使用
1 | dictionary[key] = value |
如果想在字典中添加字典,可以这样做。
例如:在你的字典中添加一个新条目;子词典
1 2 3 4 5 6 7 8 9 10 | dictionary = {} dictionary["new key"] ="some new entry" # add new dictionary entry dictionary["dictionary_within_a_dictionary"] = {} # this is required by python dictionary["dictionary_within_a_dictionary"]["sub_dict"] = {"other" :"dictionary <div class="suo-content">[collapse title=""]<ul><li>这和php.net手册页中的大多数评论一样,与所问的问题无关。</li><li>没有什么可以阻止您这样做:<wyn>dictionary = {"dictionary_within_a_dictionary": {"sub_dict": {"other" :"dictionary"}}}</wyn>(或者如果<wyn>dictionary</wyn>已经是一个dict,那么<wyn>dictionary["dictionary_within_a_dictionary"] = {"sub_dict": {"other" :"dictionary"}}</wyn>)</li></ul>[/collapse]</div><hr> <p> The orthodox syntax is <wyn>d[key] = value</wyn>, but if your keyboard is missing the square bracket keys you could do: </p> [cc lang="python"]d.__setitem__(key, value) |
实际上,定义
这个流行的问题涉及合并字典
下面是一些更简单的方法(在python3中测试过)…
1 2 3 | c = dict( a, **b ) ## see also https://stackoverflow.com/q/2255878 c = dict( list(a.items()) + list(b.items()) ) c = dict( i for d in [a,b] for i in d.items() ) |
注意:上面的第一个方法只适用于
要添加或修改单个元素,
1 | c = dict( a, **{'d':'dog'} ) ## returns a dictionary based on 'a' |
这相当于……
1 2 3 4 5 6 | def functional_dict_add( dictionary, key, value ): temp = dictionary.copy() temp[key] = value return temp c = functional_dict_add( a, 'd', 'dog' ) |
你可以创建一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class myDict(dict): def __init__(self): self = dict() def add(self, key, value): self[key] = value ## example myd = myDict() myd.add('apples',6) myd.add('bananas',3) print(myd) |
给了
1 2 | >>> {'apples': 6, 'bananas': 3} |
假设您希望生活在一个不可变的世界中,并且不希望修改原始值,而是希望创建一个新的
在Python 3.5+中,你可以:
1 2 | params = {'a': 1, 'b': 2} new_params = {**params, **{'c': 3}} |
Python 2的等价版本是:
1 2 | params = {'a': 1, 'b': 2} new_params = dict(params, **{'c': 3}) |
在这之后:
和
有时候,您不想修改原始文件(您只想要添加到原始文件中的结果)。我发现这是一个令人耳目一新的替代方案如下:
1 2 3 | params = {'a': 1, 'b': 2} new_params = params.copy() new_params['c'] = 3 |
或
1 2 3 | params = {'a': 1, 'b': 2} new_params = params.copy() new_params.update({'c': 3}) |
参考:https://stackoverflow.com/a/2255892/514866
那么多的答案,但每个人仍然忘记了那个奇怪的名字,奇怪的行为,但仍然很方便的名字。
这
1 | value = my_dict.setdefault(key, default) |
基本上就是这样做的:
1 2 3 4 | try: value = my_dict[key] except KeyError: # key not found value = my_dict[key] = default |
如。
1 2 3 4 5 6 7 8 9 10 | >>> mydict = {'a':1, 'b':2, 'c':3} >>> mydict.setdefault('d', 4) 4 # returns new value at mydict['d'] >>> print(mydict) {'a':1, 'b':2, 'c':3, 'd':4} # a new key/value pair was indeed added # but see what happens when trying it on an existing key... >>> mydict.setdefault('a', 111) 1 # old value was returned >>> print(mydict) {'a':1, 'b':2, 'c':3, 'd':4} # existing key was ignored |
你可以用
例子:
1 | wordFreqDic.update( {'before' : 23} ) |
首先检查密钥是否已经存在
1 2 3 4 5 | a={1:2,3:4} a.get(1) 2 a.get(5) None |
然后可以添加新键和值
如果您没有加入两个字典,而是将新的键值对添加到字典中,那么使用下标符号似乎是最好的方法。
1 2 3 4 5 6 7 | import timeit timeit.timeit('dictionary = {"karga": 1,"darga": 2}; dictionary.update({"aaa": 123123,"asd": 233})') >> 0.49582505226135254 timeit.timeit('dictionary = {"karga": 1,"darga": 2}; dictionary["aaa"] = 123123; dictionary["asd"] = 233;') >> 0.20782899856567383 |
但是,如果您想添加成千上万个新的键值对,您应该考虑使用