在for循环Python中的if语句中,将一个键的值分配给另一个键

在for循环Python中的if语句中,将一个键的值分配给另一个键,python,dictionary,for-loop,if-statement,Python,Dictionary,For Loop,If Statement,我有一个Python词典列表。我循环浏览每一本字典,检查给定的键是否存在。如果它确实存在,我会检查此键的值是否为空,如果为空,则需要在该空键中保存另一个键的值。无法确定如何将值从一个键分配到另一个键 我的数据如下所示: my_dicts=[{“Id”:“123”,“活动日期”:“2020-06-30”,“另一个日期”:“2020-07-01”},{“Id”:“125”,“活动日期”:“另一个日期”:“2020-07-01”}] 输出应如下所示: my_dicts=[{“Id”:“123”,“活动

我有一个Python词典列表。我循环浏览每一本字典,检查给定的键是否存在。如果它确实存在,我会检查此键的值是否为空,如果为空,则需要在该空键中保存另一个键的值。无法确定如何将值从一个键分配到另一个键

我的数据如下所示:

my_dicts=[{“Id”:“123”,“活动日期”:“2020-06-30”,“另一个日期”:“2020-07-01”},{“Id”:“125”,“活动日期”:“另一个日期”:“2020-07-01”}]

输出应如下所示:

my_dicts=[{“Id”:“123”,“活动日期”:“2020-06-30”,“另一日期”:“2020-07-01”},{“Id”:“125”,“活动日期”:“2020-07-01”,“另一日期”:“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

不确定它是否在您正在运行的代码中,但您提供的代码中有一个bug

对于my_dict中的my_dict:
对于my_dict.items()中的键:
活动密钥='活动日期'
如果密钥==活动密钥:
如果value=“”:#这应该是==否则您将赋值给“”
value=value[“另一个日期”]#value[“另一个日期”]不存在
#而且这不会将值放入字典中
其他:
持续
对于my_dict中的my_dict:
对于键,my_dict.items()中的值:
如果键=='Campaign_Date'和值=='':
value=my_dict[“另一个日期”]

请注意,这不会更新您的词典。为此,将
value=my_dict[“另一个日期”]
替换为
my_dict.update({'Campaign\u Date':my_dict[“另一个日期”]})

,以防您不想更新原始词典,同时对新词典进行必要的更正

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

几乎!您仍然无法找到丢失的键,因为
my_dict.items()
返回(键,值)对。但我想这可能是一个输入错误,因为您使用的是更深一层的
value
?另外,您从不更新原始dict,只更新当前使用的值。谢谢,我已经更新了代码并更新了原始dict。谢谢,
如果value=”“
是一个错误,我已经编辑了问题。此外,您的代码版本看起来更干净,但是,如果my_dict没有活动日期键,它必须完全跳过dict,继续循环下一个字典。测试后,它似乎不起作用,因为它返回所有数据,即使是没有活动日期的dict:/我想我必须创建另一个字典列表和附录谢谢,我还需要检查
活动日期
键是否存在。如果它不存在,我希望我的新字典不要退回它。只返回包含
活动\u date
的dict作为键,并根据该键的值进行一些修改。不完全是这样。如果你将我的口述改写为我的口述=[{“Id”:“123”,“竞选日期”:“2020-06-30”,“另一个日期”:“2020-07-01”},{“Id”:“125”,“竞选日期”:“另一个日期”:“2020-07-01”},{“Id”:“126”,“另一个日期”:“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'}我已经更新了代码以符合您的要求。您现在可以验证吗?它现在会检查密钥(
Campaign_Date
)是否存在它会更新为空值,如果密钥(
campaign\u date
)不存在,它会从列表中删除该词典。太好了!这正是我需要的。谢谢。
[{'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