匹配两个字典中的键,并使用匹配的键和两个关联的值生成新字典

2024-05-12 16:24:28 发布

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

所以我有两本字典:

dic1 = {1.0: 9.0, 3.0: 33.0, 5.0: 13.0}
dic2 = {1.0: 3.4, 3.0: 88.9, 4.0: 73.0, 5.0: 9.0}

每一个中的键是ID号,dic1中的值是rating,dic2中的值是cost。在

我想要的是一种将每个ID号与其成本和等级相关联的方法,并在此过程中删除任何与dic1中不匹配的密钥dic2。在

^{2}$

然后我希望能够创建一个列ID、cost、rating的数组。在

我想不出一个办法。有什么建议吗?在

谢谢!在


Tags: 方法id字典过程密钥数组建议成本
3条回答

试试这个,它可以在Python的旧版本(早于2.7)上运行:

dic3 = {}
for k in dic1.viewkeys() & dic2.viewkeys():
    dic3[k] = (dic1[k], dic2[k])

或者,这是一种使用字典理解来处理Python最新版本(>;=2.7但<;3.0)的方法:

^{pr2}$

在Python3.0及更高版本中,这些键已经被视为集合,从而产生了最好的解决方案:

dic3 = { k : (dic1[k], dic2[k]) for k in dic1.keys() & dic2.keys() }

无论如何,确定两个字典共有的键的诀窍是使它们的集合相交,并且它按预期工作:

dic3
=> {1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}
dic3 = {k : (v1, dic2[k]) for k, v1 in dic1.items() if k in dic2}

使用dict comprehension,dic1.viewkeys() & dic2.viewkeys()返回两个字典中所有公共键的集合:

>>> dic1 = {1.0: 9.0, 3.0: 33.0, 5.0: 13.0}
>>> dic2 = {1.0: 3.4, 3.0: 88.9, 4.0: 73.0, 5.0: 9.0}
>>> {k : (dic1[k],dic2[k])  for k in dic1.viewkeys() & dic2.viewkeys()}
{1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}

对于py2.6及更早版本,请使用dict()

^{pr2}$

在py3.x上,只需使用dict.keys()

>>> {k : (dic1[k],dic2[k])  for k in dic1.keys() & dic2.keys()}
{1.0: (9.0, 3.4), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}

相关问题 更多 >