从2个现有的dictionary(1个嵌套dictionary,1个列表dictionary)python创建一个新字典



我有两个字典K和L。K是列表字典L是嵌套字典

K={
'k1':[1,3,2],
'k2':[3,4,5],
'k3':[9,10,11]
}
L = {
'l1':{'a':'1','b':'1','c':'2'},
'l2':{'a':'1','b':'3','c':'2'},
'l3':{'a':'1','b':'2','c':'2'},
'l4':{'a':'1','b':'4','c':'2'}
}

我需要什么:我想根据以下条件创建一个新的列表字典

  1. 我需要检查L的b值是否存在于列表的K字典中
  2. 如果有,我需要归还一本密钥为K的新词典字典和L键字典

对于上面的例子,我需要返回类似于这个的东西

M = {'k1':[l1,l3,l2]
'k2':[l2,l4]
}

这是我尝试过的代码:

M= {}
for k, v in K.items():
temp = []
for i in v:
if L[i]['b'] in K[k]:
temp.append(i)
M[k] = temp

print(M)

这是您的解决方案:

new_dict, M = dict(), dict()
for key, val in L.items():
new_dict[val['b']] = key
for key, val in K.items():
for x in val:
if str(x) in new_dict:
tmp = new_dict[str(x)]
lst = M[key] if key in M else list()
lst.append(tmp)
M[key] = lst
print(M)

对于以下K、L:

K = {
'k1':[1,3,2],
'k2':[3,4,5],
'k3':[9,10,11]
}
L = {
'l1':{'a':'1','b':'1','c':'2'},
'l2':{'a':'1','b':'3','c':'2'},
'l3':{'a':'1','b':'2','c':'2'},
'l4':{'a':'1','b':'4','c':'2'}
}

输出M:

M = {
'k2': ['l2', 'l4'], 
'k1': ['l1', 'l2', 'l3']
}

[考虑L的b值具有唯一值,如果没有,则必须将其作为列表存储在new_dict字典中。]

您在L此处L[I]中查找错误的内容。我将通过从L初始创建一个查找来实现这一点,这样就不必为K中的每个键循环通过L。从那里,您可以浏览K一次,从查找中查找项目。

使用defaultdict还可以处理L具有相同的b值的情况

from collections import defaultdict
b_val_to_l = defaultdict(set)
for lkey, ldict in L.items():
# For each ldict, extract the 'b' value, convert to an int and add the
# l key to the set of l values for the corresponding b value
b_val_to_l[int(ldict['b'])].add(lkey)
print(b_val_to_l)
M = defaultdict(list)
for k, v in K.items():
for i in v:
# For each value in the k, get the set of corresponding l values
b_set = b_val_to_l.get(i, set())
# Add to the output dict
M[k].extend(list(b_set))
print(M)

只需执行以下操作:

Mtemp = { k: [l for l in L
if int(L[l]['b']) in K[k]
] for k in K }
# Mtemp can have None values, so let's remove them...
M = { k: l for k, l in Mtemp.items() if len(l) > 0 }

输出:

{'k1': ['l1', 'l2', 'l3'], 'k2': ['l2', 'l4']}

相关内容

  • 没有找到相关文章

最新更新