如果有其他问题,用python方法处理
问题:如果有其他问题,用python方法处理,python,python-3.x,Python,Python 3.x,问题: from dateutil.parser import parse origin_dest_date = { "originDate": "2019-06-30 23:59:00.000", "destDate": None } isoriginDate = False isdestDate = Fa
from dateutil.parser import parse
origin_dest_date = {
"originDate": "2019-06-30 23:59:00.000",
"destDate": None
}
isoriginDate = False
isdestDate = False
if 'originDate' in origin_dest_date:
isoriginDate = True
if origin_dest_date['originDate'] is not None and \
not origin_dest_date['originDate'] == '':
parse(origin_dest_date['originDate'])
if origin_dest_date['originDate'] == '':
origin_dest_date['originDate'] = None
if 'destDate' in origin_dest_date:
isdestDate = True
if origin_dest_date['destDate'] is not None and \
not origin_dest_date['destDate'] == '':
parse(origin_dest_date['destDate'])
if origin_dest_date['destDate'] == '':
origin_dest_date['destDate'] = None
if isoriginDate and not isdestDate:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not isoriginDate and isdestDate:
origin_dest_date['originDate'] = origin_dest_date['destDate']
elif isoriginDate and origin_dest_date['originDate'] is None and \
isdestDate and \
origin_dest_date['destDate'] is not None:
origin_dest_date['originDate'] = origin_dest_date['destDate']
elif isdestDate and \
origin_dest_date['destDate'] is None and \
isoriginDate and \
origin_dest_date['originDate'] is not None:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not isoriginDate and not isdestDate:
origin_dest_date['originDate'] = None
origin_dest_date['destDate'] = None
print(origin_dest_date)
>>> date_struc = {"originDate": None, "destDate": None}
origin_dest_date_1 = {"originDate": "2019-06-30 23:59:00.000", "destDate": None}
>>> org_dest(origin_dest_date_1) # test-2 output
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
>>> origin_dest_date_2 = {"originDate": "2019-06-30 23:59:00.000"}
>>> org_dest(origin_dest_date_2) #test-2 output
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
我有一个非常简单的问题,我需要将一个日期(origDate或destDate)更新为另一个日期(origDate或destDate),如果两个日期中的任何一个都不存在、为空或不存在,并且如果这两个日期都不存在,则将它们都设置为无
我正在寻找一种蟒蛇式的方法来实现这一点。我当前的代码工作正常,但很冗长
输入示例:
1. origin_dest_date = {
"originDate": "2019-06-30 23:59:00.000",
"destDate": None
}
2. origin_dest_date = {
"originDate": "2019-06-30 23:59:00.000"
}
3. origin_dest_date = {
"originDate": ""
}
输出:
1. origin_dest_date = {
"originDate": "2019-06-30 23:59:00.000",
"destDate": "2019-06-30 23:59:00.000"
}
2. origin_dest_date = {
"originDate": "2019-06-30 23:59:00.000",
"destDate": "2019-06-30 23:59:00.000"
}
“原始日期”:无, “日期”:无 }
from dateutil.parser import parse
origin_dest_date = {
"originDate": "2019-06-30 23:59:00.000",
"destDate": None
}
isoriginDate = False
isdestDate = False
if 'originDate' in origin_dest_date:
isoriginDate = True
if origin_dest_date['originDate'] is not None and \
not origin_dest_date['originDate'] == '':
parse(origin_dest_date['originDate'])
if origin_dest_date['originDate'] == '':
origin_dest_date['originDate'] = None
if 'destDate' in origin_dest_date:
isdestDate = True
if origin_dest_date['destDate'] is not None and \
not origin_dest_date['destDate'] == '':
parse(origin_dest_date['destDate'])
if origin_dest_date['destDate'] == '':
origin_dest_date['destDate'] = None
if isoriginDate and not isdestDate:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not isoriginDate and isdestDate:
origin_dest_date['originDate'] = origin_dest_date['destDate']
elif isoriginDate and origin_dest_date['originDate'] is None and \
isdestDate and \
origin_dest_date['destDate'] is not None:
origin_dest_date['originDate'] = origin_dest_date['destDate']
elif isdestDate and \
origin_dest_date['destDate'] is None and \
isoriginDate and \
origin_dest_date['originDate'] is not None:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not isoriginDate and not isdestDate:
origin_dest_date['originDate'] = None
origin_dest_date['destDate'] = None
print(origin_dest_date)
>>> date_struc = {"originDate": None, "destDate": None}
origin_dest_date_1 = {"originDate": "2019-06-30 23:59:00.000", "destDate": None}
>>> org_dest(origin_dest_date_1) # test-2 output
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
>>> origin_dest_date_2 = {"originDate": "2019-06-30 23:59:00.000"}
>>> org_dest(origin_dest_date_2) #test-2 output
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
代码中需要改进的两个主要方面:
from dateutil.parser import parse
origin_dest_date = { "originDate": "2019-06-30 23:59:00.000", "destDate": None }
origin = origin_dest_date.get("originDate")
dest = origin_dest_date.get("destDate")
if origin and not dest:
origin_dest_date["destDate"] = parse(origin)
elif not origin and dest:
origin_dest_date["originDate"] = parse(dest)
elif not origin and not dest:
if origin_dest_date.setdefault("originDate", None) is not None: # conditional for empty string
origin_dest_date["originDate"] = None
if origin_dest_date.setdefault("destDate", None) is not None: # conditional for empty string
origin_dest_date["destDate"] = None
- 使用变量使其看起来更清晰,尤其是条件,这样您就不会在字典中重复访问相同的值
- 使用dictionary
方法查找键-如果键存在,则返回相应的值;如果get
不存在,则返回相应的值。然后简单地检查返回的值在Python中是否为truthy,它同时解释了None
和空字符串<代码>设置默认值也可用于设置末尾的值None
from dateutil.parser import parse
origin_dest_date = { "originDate": "2019-06-30 23:59:00.000", "destDate": None }
origin = origin_dest_date.get("originDate")
dest = origin_dest_date.get("destDate")
if origin and not dest:
origin_dest_date["destDate"] = parse(origin)
elif not origin and dest:
origin_dest_date["originDate"] = parse(dest)
elif not origin and not dest:
if origin_dest_date.setdefault("originDate", None) is not None: # conditional for empty string
origin_dest_date["originDate"] = None
if origin_dest_date.setdefault("destDate", None) is not None: # conditional for empty string
origin_dest_date["destDate"] = None
代码中需要改进的两个主要方面:
from dateutil.parser import parse
origin_dest_date = { "originDate": "2019-06-30 23:59:00.000", "destDate": None }
origin = origin_dest_date.get("originDate")
dest = origin_dest_date.get("destDate")
if origin and not dest:
origin_dest_date["destDate"] = parse(origin)
elif not origin and dest:
origin_dest_date["originDate"] = parse(dest)
elif not origin and not dest:
if origin_dest_date.setdefault("originDate", None) is not None: # conditional for empty string
origin_dest_date["originDate"] = None
if origin_dest_date.setdefault("destDate", None) is not None: # conditional for empty string
origin_dest_date["destDate"] = None
- 使用变量使其看起来更清晰,尤其是条件,这样您就不会在字典中重复访问相同的值
- 使用dictionary
方法查找键-如果键存在,则返回相应的值;如果get
不存在,则返回相应的值。然后简单地检查返回的值在Python中是否为truthy,它同时解释了None
和空字符串<代码>设置默认值也可用于设置末尾的值None
from dateutil.parser import parse
origin_dest_date = { "originDate": "2019-06-30 23:59:00.000", "destDate": None }
origin = origin_dest_date.get("originDate")
dest = origin_dest_date.get("destDate")
if origin and not dest:
origin_dest_date["destDate"] = parse(origin)
elif not origin and dest:
origin_dest_date["originDate"] = parse(dest)
elif not origin and not dest:
if origin_dest_date.setdefault("originDate", None) is not None: # conditional for empty string
origin_dest_date["originDate"] = None
if origin_dest_date.setdefault("destDate", None) is not None: # conditional for empty string
origin_dest_date["destDate"] = None
以下是我的尝试:
def fill_dict(起始/目的日期,键1,键2):
如果不是来源地日期获取(键1):
来源地日期[key1]=来源地日期。获取(key2)或无
填写日期(起始日期、终止日期、起始日期)
填写日期(起始日期、终止日期、起始日期、终止日期)
关键思想是:
None
if
语句。空字符串或None
(如果字典中不存在键,则为这种情况)将解析为False
def fill_dict(起始/目的日期,键1,键2):
如果不是来源地日期获取(键1):
来源地日期[key1]=来源地日期。获取(key2)或无
填写日期(起始日期、终止日期、起始日期)
填写日期(起始日期、终止日期、起始日期、终止日期)
关键思想是:
None
if
语句。空字符串或None
(如果字典中不存在键,则为这种情况)将解析为False
使用自定义函数和示例模板dict:
def arrange_date_keys(d):
temp = {'originDate': None, 'destDate': None} # sample dict
if not d.get('originDate') or not d.get('destDate'):
date_value = d.get('originDate') or d.get('destDate')
return temp.fromkeys(temp, date_value)
return d
origin_dest_date1 = {
"originDate": "2019-06-30 23:59:00.000", "destDate": None
}
origin_dest_date2 = {
"originDate": "2019-06-30 23:59:00.000"
}
origin_dest_date3 = {
"originDate": ""
}
origin_dest_date4 = {
"originDate": "2019-06-30 23:59:00.000", "destDate": "2019-06-30 23:59:00.000"
}
print(arrange_date_keys(origin_dest_date1))
print(arrange_date_keys(origin_dest_date2))
print(arrange_date_keys(origin_dest_date3))
print(arrange_date_keys(origin_dest_date4))
连续输出:
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
{'originDate': None, 'destDate': None}
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
使用自定义函数和示例模板dict:
def arrange_date_keys(d):
temp = {'originDate': None, 'destDate': None} # sample dict
if not d.get('originDate') or not d.get('destDate'):
date_value = d.get('originDate') or d.get('destDate')
return temp.fromkeys(temp, date_value)
return d
origin_dest_date1 = {
"originDate": "2019-06-30 23:59:00.000", "destDate": None
}
origin_dest_date2 = {
"originDate": "2019-06-30 23:59:00.000"
}
origin_dest_date3 = {
"originDate": ""
}
origin_dest_date4 = {
"originDate": "2019-06-30 23:59:00.000", "destDate": "2019-06-30 23:59:00.000"
}
print(arrange_date_keys(origin_dest_date1))
print(arrange_date_keys(origin_dest_date2))
print(arrange_date_keys(origin_dest_date3))
print(arrange_date_keys(origin_dest_date4))
连续输出:
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
{'originDate': None, 'destDate': None}
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
更新:
try:
if 'destDate' not in origin_dest_date:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not origin_dest_date['destDate']:
origin_dest_date['destDate'] = origin_dest_date['originDate']
except KeyError as e:
pass
print(origin_dest_date)
更新:
try:
if 'destDate' not in origin_dest_date:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not origin_dest_date['destDate']:
origin_dest_date['destDate'] = origin_dest_date['originDate']
except KeyError as e:
pass
print(origin_dest_date)
试试这个
>>> def org_dest(d):
for k,v in d.items():
date_struc[k]=v
if all(date_struc.values()):
pass
else:
for k,v in date_struc.items():
if not v:
date_struc[k]= "".join([val for val in date_struc.values() if val])
return date_struc
最终结构,默认值为None
,将由函数更新
>>> date_struc = {"originDate": None, "destDate": None}
测试:
from dateutil.parser import parse
origin_dest_date = {
"originDate": "2019-06-30 23:59:00.000",
"destDate": None
}
isoriginDate = False
isdestDate = False
if 'originDate' in origin_dest_date:
isoriginDate = True
if origin_dest_date['originDate'] is not None and \
not origin_dest_date['originDate'] == '':
parse(origin_dest_date['originDate'])
if origin_dest_date['originDate'] == '':
origin_dest_date['originDate'] = None
if 'destDate' in origin_dest_date:
isdestDate = True
if origin_dest_date['destDate'] is not None and \
not origin_dest_date['destDate'] == '':
parse(origin_dest_date['destDate'])
if origin_dest_date['destDate'] == '':
origin_dest_date['destDate'] = None
if isoriginDate and not isdestDate:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not isoriginDate and isdestDate:
origin_dest_date['originDate'] = origin_dest_date['destDate']
elif isoriginDate and origin_dest_date['originDate'] is None and \
isdestDate and \
origin_dest_date['destDate'] is not None:
origin_dest_date['originDate'] = origin_dest_date['destDate']
elif isdestDate and \
origin_dest_date['destDate'] is None and \
isoriginDate and \
origin_dest_date['originDate'] is not None:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not isoriginDate and not isdestDate:
origin_dest_date['originDate'] = None
origin_dest_date['destDate'] = None
print(origin_dest_date)
>>> date_struc = {"originDate": None, "destDate": None}
origin_dest_date_1 = {"originDate": "2019-06-30 23:59:00.000", "destDate": None}
>>> org_dest(origin_dest_date_1) # test-2 output
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
>>> origin_dest_date_2 = {"originDate": "2019-06-30 23:59:00.000"}
>>> org_dest(origin_dest_date_2) #test-2 output
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
试试这个
>>> def org_dest(d):
for k,v in d.items():
date_struc[k]=v
if all(date_struc.values()):
pass
else:
for k,v in date_struc.items():
if not v:
date_struc[k]= "".join([val for val in date_struc.values() if val])
return date_struc
最终结构,默认值为None
,将由函数更新
>>> date_struc = {"originDate": None, "destDate": None}
测试:
from dateutil.parser import parse
origin_dest_date = {
"originDate": "2019-06-30 23:59:00.000",
"destDate": None
}
isoriginDate = False
isdestDate = False
if 'originDate' in origin_dest_date:
isoriginDate = True
if origin_dest_date['originDate'] is not None and \
not origin_dest_date['originDate'] == '':
parse(origin_dest_date['originDate'])
if origin_dest_date['originDate'] == '':
origin_dest_date['originDate'] = None
if 'destDate' in origin_dest_date:
isdestDate = True
if origin_dest_date['destDate'] is not None and \
not origin_dest_date['destDate'] == '':
parse(origin_dest_date['destDate'])
if origin_dest_date['destDate'] == '':
origin_dest_date['destDate'] = None
if isoriginDate and not isdestDate:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not isoriginDate and isdestDate:
origin_dest_date['originDate'] = origin_dest_date['destDate']
elif isoriginDate and origin_dest_date['originDate'] is None and \
isdestDate and \
origin_dest_date['destDate'] is not None:
origin_dest_date['originDate'] = origin_dest_date['destDate']
elif isdestDate and \
origin_dest_date['destDate'] is None and \
isoriginDate and \
origin_dest_date['originDate'] is not None:
origin_dest_date['destDate'] = origin_dest_date['originDate']
elif not isoriginDate and not isdestDate:
origin_dest_date['originDate'] = None
origin_dest_date['destDate'] = None
print(origin_dest_date)
>>> date_struc = {"originDate": None, "destDate": None}
origin_dest_date_1 = {"originDate": "2019-06-30 23:59:00.000", "destDate": None}
>>> org_dest(origin_dest_date_1) # test-2 output
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
>>> origin_dest_date_2 = {"originDate": "2019-06-30 23:59:00.000"}
>>> org_dest(origin_dest_date_2) #test-2 output
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
如果你只需要两个静态键,你可以试试这个,两行代码
must = {"originDate", "destDate"}
test = {"originDate":"2019-06-30 23:59:00.000", "destDate": None}
test.update({key:test[list(test.keys()-key)[0]] for key in must if key not in test or test[key] is None})
尝试使用一个无值:
test = {"originDate":"2019-06-30 23:59:00.000", "destDate": None}
test.update({key:test[list(test.keys()-key)[0]] for key in must if key not in test or test[key] is None})
test
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
用一个键尝试:
test = {"originDate":"2019-06-30 23:59:00.000",}
test.update({key:test[list(test.keys()-key)[0]] for key in must if key not in test or test[key] is None})
test
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
如果你只需要两个静态键,你可以试试这个,两行代码
must = {"originDate", "destDate"}
test = {"originDate":"2019-06-30 23:59:00.000", "destDate": None}
test.update({key:test[list(test.keys()-key)[0]] for key in must if key not in test or test[key] is None})
尝试使用一个无值:
test = {"originDate":"2019-06-30 23:59:00.000", "destDate": None}
test.update({key:test[list(test.keys()-key)[0]] for key in must if key not in test or test[key] is None})
test
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
用一个键尝试:
test = {"originDate":"2019-06-30 23:59:00.000",}
test.update({key:test[list(test.keys()-key)[0]] for key in must if key not in test or test[key] is None})
test
{'originDate': '2019-06-30 23:59:00.000', 'destDate': '2019-06-30 23:59:00.000'}
这是由
这是由
d=odd.get('originDate')或odd.get('destDate');odd={'originDate':d,'destDate':d}
。@deceze但如果两个键都存在,那么最终会覆盖一个。@deceze这在Python中是什么意思?@Aran我认为规范不清楚在这种情况下应该发生什么…@deceze如果两个键都可用,那么它应该返回原样,而不会过度写入d=odd.get('originDate'))或奇数。get('destDate');奇数={'originDate':d,'destDate':d}
…?@deceze但是如果两个键都存在,你最终会覆盖一个。@deceze这在Python中被称为什么?@Aran我认为规范不清楚在这种情况下会发生什么…@deceze如果两个键都可用,那么它应该返回原样,而不会过度写入,如果origin不是None,也不是dest
,以缩小范围条件否则,您无法区分空字符串和None
,这两个值可能是您想要的,也可能不是您想要的。您不需要解析这两个值或将它们保留为文本吗?@GiacomoAlzetta OP说,如果值为None或“empty”,则执行相同的操作,我将其解释为一个空字符串。如果origin不是None,则使用,如果not dest
,则生成更窄的条件。否则,您无法区分空字符串和None
,它们可能是您想要的,也可能不是您想要的。您不需要解析这两个值或将它们作为文本保留吗?@GiacomoAlzetta OP说,如果值为None或“empty”,则执行相同的操作,我将其解释为空字符串。get(键1,None)
可以缩短为get(key1)
我假设它会引发KeyError
。谢谢@ababak还有一个:get(key2,None)
当我开始写这段代码时,只有两个用例。我对第三个用例也做了一些小改动。get(key1,None)
可以缩短为get(key1)
我认为它会提高