【问题标题】:Swap json values with keys based on another json in python用基于python中另一个json的键交换json值
【发布时间】:2019-03-13 15:43:52
【问题描述】:

我对 python 完全陌生,我陷入了困境。

我有两个具有相同键和不同值的 json 文件,如下所示,所有值都是唯一的,不重复。

srce_d1 = {'key1': 'val1', 'key2': 'val2', 'key3': 'val3', 'key4': 'val4', 'key5': 'val5'}

dest_d2 = {'key1': 'val4', 'key2': 'val7', 'key3': 'val1', 'key4': 'val2', 'key5': 'val8'}

我需要根据基于 source_d1 的键值对重新排序/交换 dest_d2 的值。说明一下,在dest_d2中,对于key1,对应的值为value1。我必须在所有值中搜索 value1 并将其与 key1 的值交换,依此类推,直到我得到公共键值对和其余键值。

我修改后的 dest_d2 在每次迭代中应该如下所示,

dest_d2 = {'key1': 'val4', 'key2': 'val7', 'key3': 'val1', 'key4': 'val2', 'key5': 'val8'}

dest_d2 = {'key1': 'val1', 'key2': 'val7', 'key3': 'val4', 'key4': 'val2', 'key5': 'val8'}

dest_d2 = {'key1': 'val1', 'key2': 'val2', 'key3': 'val4', 'key4': 'val7', 'key5': 'val8'}

而我最终想要的输出 json 应该是,

dest_d2 = {'key1': 'val1', 'key2': 'val2', 'key3': 'val7', 'key4': 'val4', 'key5': 'val8'}

最后,我将在两个 json 文件中都有共同的键值对(key1,key2,key4),其他键值对的顺序无关紧要,但我仍然需要它们。

下面是我的代码,但它根本不起作用。

    def verify_values(des_json_obj, src_json_file):
        file_val = open(src_json_file)
        src_json_val = json.load(file_val)
        output_json = {}
        for _,value1 in des_json_obj.items():
            for key,value in src_json_val.items():
                if value == value1:
                    output_json[key] = value
        return output_json

【问题讨论】:

  • 我不完全明白你想要发生什么。我对您的问题中的iterations 有点困惑-您认为代码会产生的那些过渡阶段在制定最终解决方案时?期望的最终输出会是什么样子 - 确切地说?请编辑您的问题(编辑问题下方的链接)以添加这些详细信息。
  • @gibberish,是的,你是对的,我希望迭代成为发生交换的循环的一部分,并且我得到最终所需的输出。

标签: python-3.x


【解决方案1】:

我认为这会满足您的需求:

srce_d1 = {'key1': 'val1', 'key2': 'val2', 'key3': 'val3', 'key4': 'val4', 'key5': 'val5'}
dest_d2 = {'key1': 'val4', 'key2': 'val7', 'key3': 'val1', 'key4': 'val2', 'key5': 'val8'}
res = {k:v if k not in source_d1 else source_d1[k] for k,v in dest_d2.items()}
print(res)

示例:https://trinket.io/python/cd86b81a14

【讨论】:

  • 这几乎完成了,但我的输出仍然与源 json 相同。上面的代码给出了输出 {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4', 'key5': 'value5'} 而我理想的预期输出应该是 {'key1': 'value1', 'key2': 'value2', 'key3': 'value7', 'key4': 'value4', 'key5': 'value8'}
  • @DeenadayalanS 你能解释一下导致'key3': 'val7' 的步骤吗?
  • 以下是获取密钥对值的迭代,dest_d2 = {'key1': 'val4', 'key2': 'val7', 'key3': 'val1', 'key4': 'val2', 'key5': 'val8'} 第一次迭代,根据源 json,key1 的实际值为 val1。它当前存在于 key3 中并且必须移动到 key1,所以我需要将 val1 与 key1 中的 val4 交换,现在我的 json 看起来像 dest_d2 = {'key1': 'val1', 'key2': 'val7', 'key3': 'val4', 'key4': 'val2', 'key5': 'val8'} 等等,直到我得到结果 dest_d2 = {'key1': 'val1', 'key2': 'val2', 'key3': 'val4', 'key4': 'val7', 'key5': 'val8'}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2021-06-01
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多