为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣非少年 2023-01-04 16:47:53

我有两本词典 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


查看完整描述

3 回答

?
一只斗牛犬

TA贡献1553条经验 获得超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']}



查看完整回答
反对 回复 2023-01-04
?
回首忆惘然

TA贡献1622条经验 获得超10个赞

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


查看完整回答
反对 回复 2023-01-04
?
蝴蝶不菲

TA贡献1546条经验 获得超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']}


查看完整回答
反对 回复 2023-01-04

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信