python - 在 Python 中使用由两个值组成的键合并两个字典
问题描述
我有这样的数据——
sample 1, domain 1, value 1
sample 1, domain 2, value 1
sample 2, domain 1, value 1
sample 2, domain 3, value 1
-- 存储在字典中 --
dict_1 = {('sample 1','domain 1'): value 1, ('sample 1', 'domain 2'): value 1}
- ETC。
现在,我有一个不同的值,命名为值 2——
sample 1, domain 1, value 2
sample 1, domain 2, value 2
sample 2, domain 1, value 2
sample 2, domain 3, value 2
——我又把它放进了字典里,
dict_2 = {('sample 1','domain 1'): value 2, ('sample 1', 'domain 2'): value 2}
如何在 python 中合并这两个字典?例如('sample 1', 'domain 1')
,两个字典的键是相同的。
我希望它看起来像——
final_dict = {('sample 1', 'domain 1'): (value 1, value 2), ('sample 1', 'domain 2'): (value 1, value 2)}
- ETC。
解决方案
您可能最接近的可能是 a dict
of list
s(或set
s)。为简单起见,您通常会使用,collections.defaultdict(list)
因此您不会经常检查密钥是否已经存在。您需要将某个集合类型映射为值,因为dict
s 具有唯一键,因此您需要某种方法来对要为每个键存储的多个值进行分组。
from collections import defaultdict
final_dict = defaultdict(list)
for d in (dict_1, dict_2):
for k, v in d.items():
final_dict[k].append(v)
或者等效地itertools.chain
,您只需将循环更改为:
from itertools import chain
for k, v in chain(dict_1.items(), dict_2.items()):
final_dict[k].append(v)
旁注:如果你真的需要它dict
在最后是一个正确的,和/或坚持值是tuple
s 而不是list
s,最后的 pass 可以在最后转换为这样的:
final_dict = {k: tuple(v) for k, v in final_dict.items()}
推荐阅读
- tableau-desktop - 在 tableau 中创建一个过滤器,仅在一个维度中显示同时满足这两个条件的过滤器
- laravel - 有什么问题导致错误是目标类 [Admin\App\Http\Controllers\Admin\UserController] 不存在
- email - 使用带有附件和自定义内容的 Apache Nifi 发送电子邮件
- sql - 如何在 PostgreSQL 中使用多个分区
- google-apps-script - Classroom.Courses.Students.create 返回错误
- javascript - 在 setState 更改后反应表单字段值不更新
- c# - 如何将刻度转换为 DD/MM/YYYY 格式,其中一个刻度 = 1 天
- python - 如何在 aws lambda 中从 aws s3 读取 csv 文件
- reactjs - React Google Charts Custom Tooltip (AreaChart) 仅显示在一个区域
- excel - 将两行合并为一行并删除excel中的第二行?