Kan*_*wag 1 python dictionary python-3.x
我已经坚持这个问题很长一段时间了,只是想不出来.我只是希望能够理解我所缺少的东西以及为什么需要它.我需要做的是创建一个函数,将每个给定的键/值对添加到字典中.参数key_value_pairs将是表单(键,值)中的元组列表.
def add_to_dict(d, key_value_pairs):
newinputs = [] #creates new list
for key, value in key_value_pairs:
d[key] = value #updates element of key with value
if key in key_value_pairs:
newinputs.append((d[key], value)) #adds d[key and value to list
return newinputs
Run Code Online (Sandbox Code Playgroud)
当d和key_value_pairs有不同的键时,我无法弄清楚如何更新"value"变量.
前三个方案有效,但其余方案都失败了
>>> d = {}
>>> add_to_dict(d, [])
[]
>>> d
{}
>>> d = {}
>>> add_to_dict(d, [('a', 2])
[]
>>> d
{'a': 2}
>>> d = {'b': 4}
>>> add_to_dict(d, [('a', 2)])
[]
>>> d
{'a':2, 'b':4}
>>> d = {'a': 0}
>>> add_to_dict(d, [('a', 2)])
[('a', 0)]
>>> d
{'a':2}
>>> d = {'a', 0, 'b': 1}
>>> add_to_dict(d, [('a', 2), ('b': 4)])
[('a', 2), ('b': 1)]
>>> d
{'a': 2, 'b': 4}
>>> d = {'a': 0}
>>> add_to_dict(d, [('a', 1), ('a': 2)])
[('a', 0), ('a':1)]
>>> d
{'a': 2}
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑.
Nik*_*vin 10
使用python 3.9,您可以使用|= 更新运算符:
>>> d = {'b': 4}
>>> d |= {'a': 2}
>>> d
{'a': 2, 'b': 4}
Run Code Online (Sandbox Code Playgroud)
aru*_*n a 10
Python3.9新版本引入了两个新的字典运算符:并集(|)和就地并集(|=)。您可以使用 | 合并两个字典,而 |= 将就地更新字典。让我们考虑 2 个字典d1和d2
d1 = {"name": "Arun", "height": 170}
d2 = {"age": 21, "height": 170}
Run Code Online (Sandbox Code Playgroud)
d3 = d1 | d2 # d3 is the union of d1 and d2
print(d3)
Run Code Online (Sandbox Code Playgroud)
输出:
{'name': 'Arun', 'height': 170, 'age': 21}
Run Code Online (Sandbox Code Playgroud)
用 d2 更新 d1
d1 |= d2
print(d1)
Run Code Online (Sandbox Code Playgroud)
输出:
{'name': 'Arun', 'height': 170, 'age': 21}
Run Code Online (Sandbox Code Playgroud)
您可以使用新的密钥权重更新 d1,如下所示
d1 |= {"weight": 80}
print(d1)
Run Code Online (Sandbox Code Playgroud)
输出:
{'name': 'Arun', 'height': 170, 'age': 21, 'weight': 80}
Run Code Online (Sandbox Code Playgroud)
Python内置了这个功能:
>>> d = {'b': 4}
>>> d.update({'a': 2})
>>> d
{'a': 2, 'b': 4}
Run Code Online (Sandbox Code Playgroud)
或者给你不允许使用dict.update:
>>> d = dict(d.items() + {'a': 2}.items()) # doesn't work in python 3
Run Code Online (Sandbox Code Playgroud)
与 Eric 的第二个片段相比,这是一个更优雅的解决方案
>>> a = {'a' : 1, 'b' : 2}
>>> b = {'a' : 2, 'c' : 3}
>>> c = dict(a, **b)
>>> a
{'a': 1, 'b': 2}
>>> b
{'a': 2, 'c': 3}
>>> c
{'a': 2, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)
它适用于 Python 2 和 3
当然,更新方法
>>> a
{'a': 1, 'b': 2}
>>> b
{'a': 2, 'c': 3}
>>> a.update(b)
>>> a
{'a': 2, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)
但是,请小心后者,因为如果像这里这样滥用可能会导致问题
>>> a = {'a' : 1, 'b' : 2}
>>> b = {'a' : 2, 'c' : 3}
>>> c = a
>>> c.update(b)
>>> a
{'a': 2, 'b': 2, 'c': 3}
>>> b
{'a': 2, 'c': 3}
>>> c
{'a': 2, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)
python 中的每个键都dict对应一个值。d和具有不同键的情况key_value_pairs不是相同的元素。
是否newinputs应该包含以前不存在的键/值对d?如果是这样:
def add_to_dict(d, key_value_pairs):
newinputs = []
for key, value in key_value_pairs:
if key not in d:
newinputs.append((key, value))
d[key] = value
return newinputs
Run Code Online (Sandbox Code Playgroud)
是否newinputs应该包含键所在然后更改的键/值d对?如果是这样:
def add_to_dict(d, key_value_pairs):
newinputs = []
for key, value in key_value_pairs:
if key in d:
newinputs.append((key, value))
d[key] = value
return newinputs
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6928 次 |
| 最近记录: |