【问题标题】:Getting common key value pairs from nested dictionary从嵌套字典中获取公共键值对
【发布时间】:2021-02-16 00:37:48
【问题描述】:

我试图通过在公共键值对上组合两个字典来创建嵌套字典

词典如下:

dict1 = {'employee': {1: {'empId': 1, 'salary': 1000}, 2: {'empId': 2, 'salary': 2000}}}
dict2 = {'time': {1: {'empId': 1, 'avgtime': 55}, 2: {'empId': 1, 'avgtime': 25}, 3: {'empId': 2, 'avgtime': 25}}}

我想将两者结合起来创建一个字典,时间是一个嵌套在员工内部的字典,如下所示.....

dict3 = {'employee': {1: {'empId': 1, 'salary': 1000, 'avgtime': {1: 55, 2: 25}}}, 2: {'empId': 2, 'salary': 2000, 'avgtime': {1: 25}}}

我已经尝试了几件事,可以让整个 dict2 附加到 dict1 的末尾,但无法弄清楚每次有键/值匹配时如何添加嵌套 dict

def merge(d1, d2):
    for thing1, thing2 in list(zip(d1['employee'].values(), d2['time'].values())):
        d1['time'] = {}
        for k in thing1.items():
            if k in thing2.items():
                d1['time'].update(thing2)
        return d1
a = merge(dict1,dict2)
print(a)

上面的输出给出了以下结果,但它是我得到的最接近的结果

{'employee': {1: {'empId': 1, 'salary': 1000}, 2: {'empId': 2, 'salary': 2000}}, 'time': {'empId': 1, 'avgtime': 55}}

所以我的问题是如何将这两个字典组合成一个公共键值对,如 dict3 所示

【问题讨论】:

  • 请提供预期的MRE - Minimal, Reproducible Example。显示中间结果与预期结果的偏差。我们应该能够将您的代码块粘贴到文件中,运行它并重现您的问题。这也让我们可以在您的上下文中测试任何建议。
  • 您想要的输出不清楚。首先,您的数据输入远非最少,因此关键问题会在额外的字段中丢失。其次,当输入中没有相应的数据时,您想要的输出会神奇地生成“第 2 天”字典——合并的方法还不清楚。
  • 好吧,又破解了,希望现在更清楚
  • 我会等你完成 MRE。
  • 好的,我已经尝试过让它更清晰,我希望它现在更好,如果不能,请您更具体地说明您希望看到更多/更少的内容吗?我只是想学习,希望能得到帮助

标签: python json dictionary nested


【解决方案1】:

您必须将此视为一个数据库,其中 dict1 是主数据库。您不能使用“zip”,因为记录不会一对一排列。您必须搜索 dict2 记录才能找到匹配的员工 ID。另请注意,您实际上不必返回“d1”;您的代码正在就地修改 dict1 。这可以满足您的要求:

def merge(d1, d2):
    for k1,v1 in d1['employee'].items():
        v1['avgtime'] = {}
        for k2,v2 in d2['time'].items():
            if v2['empId'] == v1['empId']:
                v1['avgtime'][k2] = v2['avgtime']
merge(dict1,dict2)
print(dict1)

【讨论】:

  • 哦,好吧,是的,完全有道理!非常感谢,这真的很有帮助!
猜你喜欢
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 2019-12-04
  • 2014-12-06
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多