【问题标题】:Check the values in complex dict of dicts with another dict of dicts and save it a third dictionary用另一个字典检查复杂字典中的值并将其保存为第三个字典
【发布时间】:2019-05-22 22:42:22
【问题描述】:

字典的输入字典是dict1和dict2。

dict1 = {company1:[{'age':27,'weight':200,'name':'john'},{'age':23,'weight':180,'name':'peter'}],
         company2:[{'age':30,'weight':190,'name':'sam'},{'age':32,'weight':210,'name':'clove'},{'age':21,'weight':170,'name':'steve'}],
         company3:[{'age':36,'weight':175,'name':'shaun'},{'age':40,'weight':205,'name':'dany'},{'age':25,'weight':160,'name':'mark'}]
         company4:[{'age':36,'weight':155,'name':'lina'},{'age':40,'weight':215,'name':'sammy'},{'age':25,'weight':190,'name':'matt'}]
        }

dict2 = {company2:[{'age':30},{'age':45},{'age':52}],
         company4:[{'age':43},{'age':67},{'age':22},{'age':34},{'age':42}]
        }

我正在尝试编写一个逻辑,我可以检查 dict2 中每个公司密钥的内部密钥 ('age') 是否存在于同一公司密钥 dict1 中,即使内部密钥 'age' 的一个值与内部密钥 (' age') 在同一公司密钥的 dict1 中,然后将其保存到第三个字典中。请检查以下示例

示例

company2:[{'age':30}]

匹配

company2:[{'age':30,'weight':190,'name':'sam'}, ...]

我还想将不出现在 dict2 中的 dict1 的 key:values 保存到 dict3 中,正如我们在下面的示例中看到的那样,company1 键不在 dict2 中。

示例

company1:[{'age':27,'weight':200,'name':'john'},{'age':23,'weight':180,'name':'peter'}]

company3:[{'age':36,'weight':175,'name':'shaun'},{'age':40,'weight':205,'name':'dany'},{'age':25,'weight':160,'name':'mark'}]

预期输出:

dict3 = {company1:[{'age':27,'weight':200,'name':'john'},{'age':23,'weight':180,'name':'peter'}],
         company2:[{'age':30,'weight':190,'name':'sam'},{'age':32,'weight':210,'name':'clove'},{'age':21,'weight':170,'name':'steve'}]
         company3:[{'age':36,'weight':175,'name':'shaun'},{'age':40,'weight':205,'name':'dany'},{'age':25,'weight':160,'name':'mark'}]}

请原谅我的解释!

【问题讨论】:

  • 应该company3dict3 中吗?
  • 是的,company3 应该在 dict3 中,我的错。我会编辑。
  • 我在输入dict1中添加了company4,dict1的compay4和dict2的'age'键不匹配,它不应该在dict3中。谢谢

标签: python dictionary


【解决方案1】:

使用其他更简洁的方法可能会更好地完成此解决方案。但是,它达到了预期的效果。

from pprint import pprint

dict3 = dict()

dict1 = {'company1':[{'age':27,'weight':200,'name':'john'},{'age':23,'weight':180,'name':'peter'}],
         'company2':[{'age':30,'weight':190,'name':'sam'},{'age':32,'weight':210,'name':'clove'},{'age':21,'weight':170,'name':'steve'}],
         'company3':[{'age':36,'weight':175,'name':'shaun'},{'age':40,'weight':205,'name':'dany'},{'age':25,'weight':160,'name':'mark'}],
         'company4':[{'age':36,'weight':155,'name':'lina'},{'age':40,'weight':215,'name':'sammy'},{'age':25,'weight':190,'name':'matt'}]
        }

dict2 = {'company2':[{'age':30},{'age':45},{'age':52}],
         'company4':[{'age':43},{'age':67},{'age':22},{'age':34},{'age':42}]
        }

for company, array in dict1.items():
    if company not in dict2:
        dict3[company] = array
    else:
        # all the ages for this company in dict1
        ages = set(map(lambda x: x['age'], array))

        for dictref in dict2[company]:
            if dictref['age'] in ages:
                dict3[company] = array
                break
pprint(dict3)

输出是

{'company1': [{'age': 27, 'name': 'john', 'weight': 200},
              {'age': 23, 'name': 'peter', 'weight': 180}],
 'company2': [{'age': 30, 'name': 'sam', 'weight': 190},
              {'age': 32, 'name': 'clove', 'weight': 210},
              {'age': 21, 'name': 'steve', 'weight': 170}],
 'company3': [{'age': 36, 'name': 'shaun', 'weight': 175},
              {'age': 40, 'name': 'dany', 'weight': 205},
              {'age': 25, 'name': 'mark', 'weight': 160}]}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 2021-01-18
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多