Python 使用另一个字典值更新字典的列表值

我有两本词典 dict1 和 dict2。我应该使用 dict2 值更新(或创建新的 dict3)dict1 列表值,因为 dict1 列表值是 dict2 的键。注意-我只需要使用 Python 2.7。感谢帮助 !!!


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]


Output needed


dict3 = {'key1':[Alpha,Beta,Gamma], 'key2':[Epsilon,v9], 'key3':[Beta,Zeta,Delta,v11],'key4':[Gamma,Epsilon,v0]



def final(dict1,dict2):

  dict3 = {}

  for k,v in dict1.iteritems():

    if v in dict2:

      if k in dict3:

        dict3[k].append(dict2[v])

      else:

        dict3[k] = dict2[v]

    else:

      dict3[k].append(v)


  return dict3


白衣非少年
浏览 289回答 3
3回答

一只斗牛犬

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 Python2print(dict3)印刷:{'key1': ['Alpha', 'Beta', 'Gamma'], 'key2': ['Epsilon', 'v9'], 'key3': ['Beta', 'Zeta', 'Delta', 'v11'], 'key4': ['Gamma', 'Epsilon', 'v0']}

回首忆惘然

您可以使用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

蝴蝶不菲

这些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']}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python