Присвойте значение одного ключа другому ключу в операторе if в течение l oop Python - PullRequest
1 голос
/ 10 апреля 2020

У меня есть список словарей в Python. Я просматриваю каждый словарь и проверяю, существует ли данный ключ. Если он существует, я проверяю, является ли значение этого ключа пустым, если он пуст, тогда мне нужно сохранить значение другого ключа в этом пустом ключе. Не могу понять, как присвоить значение одной клавише другой ...

Мои данные выглядят так:

my_dicts = [{"Id": "123", "Campaign_Date": "2020-06-30", "Another_Date": "2020-07-01"}, {"Id": "125", "Campaign_Date": "", "Another_Date": "2020-07-01"}]

Вывод должен выглядеть следующим образом :

my_dicts = [{"Id": "123", "Campaign_Date": "2020-06-30", "Another_Date": "2020-07-01"}, {"Id": "125", "Campaign_Date": "2020-07-01", "Another_Date": "2020-07-01"}]

Я пробовал следующее:

for my_dict in my_dicts:
    for key in my_dict.items():
        campaign_key = 'Campaign_Date'
        if key == campaign_key:
            if value == "":
                value = value["Another_Date"] 
        else:
            continue

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Не уверен, что это в коде, который вы запускаете, но есть ошибка в коде, который вы дали.

for my_dict in my_dicts:
    for key in my_dict.items():
        campaign_key = 'Campaign_Date'
        if key == campaign_key:
            if value = "": # This should be == otherwise you're assigning value to ""
                value = value["Another_Date"] # value["Another_Date"] Doesn't exist
                # Also this won't put the value into the dictionary
        else:
            continue
for my_dict in my_dicts:
    for key, value in my_dict.items():
        if key == 'Campaign_Date' and value == "":
           value = my_dict["Another_Date"]

Обратите внимание, что это не обновит ваш словарь. Для этого замените value = my_dict["Another_Date"] на my_dict.update({'Campaign_Date':my_dict["Another_Date"]})

1 голос
/ 10 апреля 2020

На всякий случай, если вы не хотите, чтобы wi sh обновлял оригинальный словарь и одновременно вносил необходимые исправления в новый словарь.

import copy
#my_dicts = [{"Id": "123", "Campaign_Date": "2020-06-30", "Another_Date": "2020-07-01"}, {"Id": "125", "Campaign_Date": "", "Another_Date": "2020-07-01"}]
# New input
my_dicts = [{"Id": "123", "Campaign_Date": "2020-06-30", "Another_Date": "2020-07-01"}, {"Id": "125", "Campaign_Date": "", "Another_Date": "2020-07-01"}, {"Id": "126", "Another_Date": "2020-07-01"}]

my_new_list = copy.deepcopy(my_dicts)

campaign_key = 'Campaign_Date'
for index, my_dict in enumerate(my_new_list):
    # check if "campaign_key" key exists
    if campaign_key in my_dict.keys():
        # Check for empty or null value for key "campaign_key"
        if my_dict[campaign_key] in ["", None]:
            my_dict['Campaign_Date'] = my_dict["Another_Date"]
    else:
        # if key "campaign_key" doesn't exist delete that item from list
        my_new_list.pop(index)

print(my_dicts)
print(my_new_list)
expected_output = [{'Id': '123', 'Campaign_Date': '2020-06-30', 'Another_Date': '2020-07-01'}, {'Id': '125', 'Campaign_Date': '2020-07-01', 'Another_Date': '2020-07-01'}]
if my_new_list == expected_output:
    print("Success")

Вывод:

[{'Id': '123', 'Campaign_Date': '2020-06-30', 'Another_Date': '2020-07-01'}, {'Id': '125', 'Campaign_Date': '', 'Another_Date': '2020-07-01'}, {'Id': '126', 'Another_Date': '2020-07-01'}]
[{'Id': '123', 'Campaign_Date': '2020-06-30', 'Another_Date': '2020-07-01'}, {'Id': '125', 'Campaign_Date': '2020-07-01', 'Another_Date': '2020-07-01'}]
Success
1 голос
/ 10 апреля 2020
for my_dict in my_dicts:
    for key in my_dict.items():
        campaign_key = 'Campaign_Date'
        if key == campaign_key:
            if value = "":
                my_dict['Campaign_Date'] = my_dict["Another_Date"] 
        else:
            continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...