python3.x:合并两个具有相同键和值的字典

2024-04-25 05:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

Python版本:3.x

我有两个具有相同键的字典,值是数组。我在这里看到的大多数问题,出于所需的目的,每个键只有一个值。我想要的是将这两个字典的值合并为联接数组。也许下面会清楚:

我所拥有的:

d1 = {(1, "Autumn"): np.array([2.5, 4.5, 7.5, 9.5]), (1, "Spring"): np.array([10.5, 11.7, 12.3, 15.0])}
d2 = {(1, "Autumn"): np.array([10.2, 13.3, 15.7, 18.8]), (1, "Spring"): np.array([15.6, 20, 23, 27])}

我试过:

^{pr2}$

我想要的:

d3 = {(1, "Autumn"): np.array([2.5, 4.5, 7.5, 9.5, 10.2, 13.3, 15.7, 18.8]), (1, "Spring"): np.array([10.5, 11.7, 12.3, 15.0, 15.6, 20, 23, 27])}

我是不是少了点什么?请帮忙!在

附言:我看过How to merge two dictionaries in a single expression?。在


Tags: to目的版本字典np数组arrayhow
3条回答

试试这个:

>>> import numpy as np
>>> d1 = {(1, "Autumn"): np.array([2.5, 4.5, 7.5, 9.5]), (1, "Spring"): np.array([10.5, 11.7, 12.3, 15.0])}
>>> d2 = {(1, "Autumn"): np.array([10.2, 13.3, 15.7, 18.8]), (1, "Spring"): np.array([15.6, 20, 23, 27])}
>>> d3 = {k: np.concatenate((d1.get(k, np.array([])), d2.get(k, np.array([])))) for k in set(d1.keys()).union(set(d2.keys()))}
>>> d3
{(1, 'Spring'): array([10.5, 11.7, 12.3, 15. , 15.6, 20. , 23. , 27. ]), (1, 'Autumn'): array([ 2.5,  4.5,  7.5,  9.5, 10.2, 13.3, 15.7, 18.8])}

注意事项

  • 这是一种理解力
  • 首先,计算2dict中的键的并集,以确保没有留下键(为此,每个dict中的键被转换为集合
  • 对于上述集合中的每个元素,从每个dict中获取相应的数组(如果键不存在,则为空),并将它们连接起来
  • 这就是Pythonic(也是通用的)方法,我的numpy知识接近于0(我确信从代码片段中可以很明显地看出,所有这些括号都非常复杂),极有可能numpy有一些东西可以做更优雅的举止
  • [SO]: How to merge two dictionaries in a single expression?期望输出和当前输出(考虑到dict值是简单的Iterable(无论它们是Python还是numpy或任何其他类型的值都不相关))是关于dicts的合并概念的两种不同(同样正确的)方法,对于公共键:
    • 只保留最后一个dict的值
    • 其他的和(无论对操作数意味着什么)

如果您在两个dict中始终使用相同的键,则这应该符合您的需要:

d3 = {key:np.hstack([d1[key],d2[key]]) for key in d1.keys()}

输出:

^{pr2}$

但这依赖于一个假设,即每个键都有一个值,并且每个键都出现在两个dict中。在

我相信你需要像这样的短信:

{key:np.append(d1[key], d2[key]) for key in d1.keys()}

不确定np.追加不过。 当然,只有当dicts有相同的键时,它才会起作用。在

相关问题 更多 >