【问题标题】:How to create a nested dictionary如何创建嵌套字典
【发布时间】:2018-11-28 05:53:17
【问题描述】:

所以我在 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}}

这可能吗?我正在寻找嵌套字典,但对我没有任何帮助。

【问题讨论】:

  • 是的,这是可能的。
  • “没有什么对我有用” - 告诉我们你已经尝试过什么

标签: python dictionary merge


【解决方案1】:

您只需要遍历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 分配正确的值。它还使用dict.get() 确保在搜索d2 中的键时遇到KeyError 时添加None

单线:

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

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

【讨论】:

  • 非常感谢 :) 这很有帮助。我全心全意地感谢它。上周我一直在搞砸这个。
  • @mfweewee Np。很高兴我能帮忙:)。
  • 也许您可以再次提供帮助,因为我知道您是专家 :) 现在我的结果字典需要与另一个字典合并。我再次尝试这种方式,但我得到了一个输出 {{new_value1: 123456: None, new_value2: 892019: None, new_value3: 102930491: None}。我丢失了内部字典:(
【解决方案2】:

首先,您讨厌在键和值周围加上括号。

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]} 事情。但是如果你理解了第一个例子,实现它就不难了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2023-01-18
    • 2020-09-26
    • 2021-04-04
    • 1970-01-01
    • 2021-05-20
    相关资源
    最近更新 更多