所以我有两本词典:
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中的值是等级,dic2中的值是成本。
我想要的是一种将每个ID号与其成本和评级相关联的方法,并在此过程中删除在dic1中没有匹配的任何键dic2。
dic3 = {1.0: (9.0, 4.2), 3.0: (33.0, 88.9), 5.0: (13.0, 9.0)}
然后,我希望能够创建一个包含列ID,成本,评级的数组。
我无法想办法做到这一点。有什么建议吗?
谢谢!
答案 0 :(得分:3)
dic3 = {k : (v1, dic2[k]) for k, v1 in dic1.items() if k in dic2}
答案 1 :(得分:1)
使用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()
:
>>> dict( (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)}
在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)}
答案 2 :(得分:1)
试试这个,它适用于旧版本的Python(早于2.7):
dic3 = {}
for k in dic1.viewkeys() & dic2.viewkeys():
dic3[k] = (dic1[k], dic2[k])
或者这是一种方法,可以使用词典理解在最新版本的Python上工作(&gt; = 2.7但<&lt; 3.0):
dic3 = { k : (dic1[k], dic2[k]) for k in dic1.viewkeys() & dic2.viewkeys() }
在Python 3.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)}