Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果有其他问题,用python方法处理_Python_Python 3.x - Fatal编程技术网

如果有其他问题,用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
      方法查找键-如果键存在,则返回相应的值;如果
      None
      不存在,则返回相应的值。然后简单地检查返回的值在Python中是否为truthy,它同时解释了
      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
      方法查找键-如果键存在,则返回相应的值;如果
      None
      不存在,则返回相应的值。然后简单地检查返回的值在Python中是否为truthy,它同时解释了
      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)
    我认为它会提高