#python-3.x
#python-3.x
Вопрос:
Я совершенно новичок в 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'}
Мне нужно изменить порядок / поменять местами значения dest_d2 в соответствии с парами ключ-значение на основе source_d1. Чтобы объяснить, в 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'}
И в конце у меня будут общие пары ключ-значение (key1, key2, key4) в обоих файлах json, и порядок других пар ключ-значение не имеет значения, но они мне все равно нужны.
Ниже приведен мой код, но он вообще не работает.
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
Комментарии:
1. Я не совсем понимаю, чего вы хотите добиться. Меня немного смущает
iterations
в вашем вопросе — это те переходные этапы, которые, как вы предполагаете, будет производить код, пока он разрабатывает окончательное решение ? Как будет выглядеть желаемый конечный результат — точно? Пожалуйста, отредактируйте свой вопрос (отредактируйте ссылку под вопросом) , чтобы добавить эти детали.2. @gibberish, да, вы правы, я ожидаю, что итерации будут частью цикла, в котором происходит замена, и я получу окончательный желаемый результат.
Ответ №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)
Комментарии:
1. Это почти сделало это, но все равно у меня получается такой же результат, как и исходный json. Приведенный выше код выдает результат,
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4', 'key5': 'value5'}
тогда как мой идеальный ожидаемый результат должен быть,{'key1': 'value1', 'key2': 'value2', 'key3': 'value7', 'key4': 'value4', 'key5': 'value8'}
2. @DeenadayalanS Можете ли вы объяснить шаги, которые приводят к
'key3': 'val7'
?3. Ниже приведены итерации для получения значений пары ключей,
dest_d2 = {'key1': 'val4', 'key2': 'val7', 'key3': 'val1', 'key4': 'val2', 'key5': 'val8'}
первая итерация, фактическое значение key1 согласно исходному json, равно val1 . В настоящее время он присутствует в key3 и его нужно переместить в key1, поэтому мне нужно поменять val1 на val4, который находится в key1, и теперь мой 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'}