Ric*_*c S 24 python dictionary list
我有以下两个玩具序列
d1 = {
'a': [2,4,5,6,8,10],
'b': [1,2,5,6,9,12],
'c': [0,4,5,8,10,21]
}
d2 = {
'a': [12,15],
'b': [14,16],
'c': [23,35]
}
Run Code Online (Sandbox Code Playgroud)
我想得到一个独特的字典,我在第一个字典值之后堆叠第二个字典值,在同一个方括号内.
我尝试了以下代码
d_comb = {key:[d1[key], d2[key]] for key in d1}
Run Code Online (Sandbox Code Playgroud)
但是我获得的输出在每个键的列表中有两个列表,即
{'a': [[2, 4, 5, 6, 8, 10], [12, 15]],
'b': [[1, 2, 5, 6, 9, 12], [14, 16]],
'c': [[0, 4, 5, 8, 10, 21], [23, 35]]}
Run Code Online (Sandbox Code Playgroud)
而我想获得
{'a': [2, 4, 5, 6, 8, 10, 12, 15],
'b': [1, 2, 5, 6, 9, 12, 14, 16],
'c': [0, 4, 5, 8, 10, 21, 23, 35]}
Run Code Online (Sandbox Code Playgroud)
我怎么能用一两行代码呢?
yat*_*atu 29
你几乎拥有它,而是+用来附加两个列表:
{key: d1[key] + d2[key] for key in d1}
{'a': [2, 4, 5, 6, 8, 10, 12, 15],
'b': [1, 2, 5, 6, 9, 12, 14, 16],
'c': [0, 4, 5, 8, 10, 21, 23, 35]}
Run Code Online (Sandbox Code Playgroud)
Maa*_*bré 12
如果不是所有的键d2都在d1,那么最简单的事情是使用set union和dict.get:
combined_keys = d1.keys() | d2.keys()
d_comb = {key: d1.get(key, []) + d2.get(key, []) for key in combined_keys}
Run Code Online (Sandbox Code Playgroud)
您可以使用扩展的可迭代解包:
d1 = {
'a': [2,4,5,6,8,10],
'b': [1,2,5,6,9,12],
'c': [0,4,5,8,10,21]
}
d2 = {
'a': [12,15],
'b': [14,16],
'c': [23,35]
}
d_comb = {key:[*d1[key], *d2[key]] for key in d1}
print(d_comb)
Run Code Online (Sandbox Code Playgroud)
产量
{'c': [0, 4, 5, 8, 10, 21, 23, 35], 'b': [1, 2, 5, 6, 9, 12, 14, 16], 'a': [2, 4, 5, 6, 8, 10, 12, 15]}
Run Code Online (Sandbox Code Playgroud)
您可以使用itertools.chain从输入列表有效地构建单个列表:
from itertools import chain
d_comb = {key: list(chain(d1[key], d2[key])) for key in d1}
Run Code Online (Sandbox Code Playgroud)
对于涵盖任意数量的字典和在字典中不相等的键的更一般情况,请参阅在 python 中合并字典值列表。
| 归档时间: |
|
| 查看次数: |
1284 次 |
| 最近记录: |