在for循环Python中的if语句中,将一个键的值分配给另一个键
我有一个Python词典列表。我循环浏览每一本字典,检查给定的键是否存在。如果它确实存在,我会检查此键的值是否为空,如果为空,则需要在该空键中保存另一个键的值。无法确定如何将值从一个键分配到另一个键 我的数据如下所示:在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”,“活动
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