簡體   English   中英

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

[英]Python update the list values of dictionary using another dictionary values

我有兩個字典 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
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']}

您可以使用map()遍歷列表並將每個項目作為dict.get() function 的參數傳遞。 然后使用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)

Output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM