如何创建嵌套字典

时间:2018-06-19 09:56:03

标签: python dictionary merge

所以我在python中的字典有些问题。例如,我有如下字典:

d1 = {123456:xyz, 892019:kjl, 102930491:{[plm,kop]}
d2= {xyz:987, kjl: 0902, plm: 019240, kop:09829}

我希望嵌套字典看起来像那样。

d={123456 :{xyz:987}, 892019:{kjl:0902}, 102930491:{plm:019240,kop:09829}}
这可能吗?我正在寻找嵌套的词典,但对我来说没有任何作用。

2 个答案:

答案 0 :(得分:0)

首先,你不想在你的键和值周围加上括号。

d1 = {'123456':'xyz', '892019':'kjl', '102930491':'plm'}
d2= {'xyz':'987', 'kjl':'0902', 'plm':'019240', 'kop':'09829'}

然后我建议你做一个for循环

for key, value in d1.iter():
    d1[key] = d2[value]

我忽略了你的{[plm,kop]}事。但是如果您理解了第一个例子,那么实现它并不困难。

答案 1 :(得分:0)

您只需循环浏览d1并从d2分配正确的值。

<强>代码:

d1 = {123456:'xyz', 892019:'kjl', 102930491:['plm','kop']}
d2 = {'xyz':987, 'kjl': 902, 'plm': 19240, 'kop':9829}

result = {}
for k, v in d1.items():
    if isinstance(v, list):
        result[k] = {k: d2.get(k) for k in v}
    else:
        result[k] = {v: d2.get(v)}

print(result)

<强>输出:

{123456: {'xyz': 987}, 892019: {'kjl': 902}, 102930491: {'plm': 19240, 'kop': 9829}}

以上使用isintance()来检查值是否为列表,因此您可以循环它并从d2分配正确的值。如果在None中搜索密钥时遇到dict.get(),它还会使用KeyError来确保添加d2

<强>一衬垫:

{k: {k: d2.get(k) for k in v} if isinstance(v, list) else {v: d2.get(v)} for k, v in d1.items()}

但这会变得混乱而且难以维护。