3 回答
TA贡献1784条经验 获得超2个赞
dict1 = {'key1':['v1','v2','v3'], 'key2':['v5','v9'], 'key3':['v2','v6','v4','v11'],'key4':['v3','v5','v0']}
dict2 = {'v1':['Alpha'], 'v2':['Beta'], 'v3':['Gamma'], 'v4':['Delta'], 'v5':['Epsilon'], 'v6':['Zeta']}
dict3 = {k:[dict2.get(vv, [vv])[0] for vv in v] for k, v in dict1.items()} # or dict1.iteritems() in case of Python2
print(dict3)
印刷:
{'key1': ['Alpha', 'Beta', 'Gamma'], 'key2': ['Epsilon', 'v9'], 'key3': ['Beta', 'Zeta', 'Delta', 'v11'], 'key4': ['Gamma', 'Epsilon', 'v0']}
TA贡献1847条经验 获得超11个赞
您可以使用map()
迭代列表并将每个项目作为函数的参数传递dict.get()
。然后使用filter()
您可以从数组中删除所有None
元素。要构建最终列表,您可以使用sum()
.
代码:
def final(dict1, dict2):
dict3 = {}
for k, v in dict1.iteritems():
dict3[k] = sum(filter(None, map(dict2.get, v)), [])
return dict3
也可以在不调用任何函数的情况下完成:
def final(dict1, dict2):
dict3 = {}
for k, v in dict1.iteritems():
tmp = []
for i in v:
if i in dict2:
tmp += dict2[i]
else:
tmp.append(i)
dict3[k] = tmp
return dict3
TA贡献1810条经验 获得超4个赞
这些for循环应该可以解决问题:
dict1 = {'key1':['v1','v2','v3'],
'key2':['v5','v9'],
'key3':['v2','v6','v4','v11'],
'key4':['v3','v5','v0']}
dict2 = {'v1':['Alpha'],
'v2':['Beta'],
'v3':['Gamma'],
'v4':['Delta'],
'v5':['Epsilon'],
'v6':['Zeta']}
dict3 = {}
for key in dict1.keys():
for v in dict1[key]:
temp = [dict2[i] if i in dict2.keys() else v for i in dict1[key]]
for i,e in enumerate(temp):
if type(e) == type([]):
temp[i] = e[0]
dict3.update({key:temp})
print(dict3)
输出:
{'key1': ['Alpha', 'Beta', 'Gamma'],
'key2': ['Epsilon', 'v9'],
'key3': ['Beta', 'Zeta', 'Delta', 'v11'],
'key4': ['Gamma', 'Epsilon', 'v0']}
添加回答
举报