当前位置: 首页 > 知识库问答 >
问题:

python中类似开关大小写的结构[重复]

井旺
2023-03-14

我使用了下面的函数,它获取成员的登录日期和合同长度,并返回一个修改后的数据框,其中包含每个成员的到期日期。该函数按预期工作,但我想知道是否有更干净的方法来编写嵌套函数month\u to_num(ind)。我知道python没有实现cases,但是有没有办法重写所有if/elif/else语句?

def renewal_date(df):

    def month_to_num(ind):
        if (df.loc[ind, "Contract Type"] == "1 Month"):
            return 1
        elif (df.loc[ind, "Contract Type"] == "3 Months Prom" or 
              df.loc[ind, "Contract Type"] == "3 Month"):
            return 3
        elif (df.loc[ind, "Contract Type"] == "4 Month Promo"):
            return 4
        elif (df.loc[ind, "Contract Type"] == "6 Months"):
            return 6
        else:
            return 12

    for z in range(0, len(df)): 
        exp_date = (df.loc[z, "Date-Joined"] + 
                    relativedelta(months=+month_to_num(z)))
        df.set_value(z,"Date-Renewal", exp_date)

    return df

共有2个答案

涂玉韵
2023-03-14

您可以将字典与dict.get()方法配合使用,如果字典中不存在键,该方法将返回默认值。

def renewal_date(df):
    def month_to_num(ind):
        contract_types = {'1 Month': 1, '3 Months Prom': 3, '4 Month Promo': 4, '6 Months': 6}

        return contract_types.get(df.loc[ind, "Contract Type"], 12)

    for z in range(0, len(df)):
        exp_date = (df.loc[z, "Date-Joined"] +
                    relativedelta(months=+month_to_num(z)))
        df.set_value(z, "Date-Renewal", exp_date)

    return df
江曦
2023-03-14

这更适合于代码复查堆栈交换,但为了保留功能,您通常会使用字典:

MONTH_NUMS = {
    '1 Month': 1,
    '3 Months Prom': 3,
    '3 Month': 3,
    '4 Month Promo': 4,
    '6 Months': 6,
}

def month_to_num(ind):
    return MONTH_NUMS.get(df.loc[ind, 'Contract Type'], 12)

也就是说,在我们如何以这种方式将字符串映射到数字的过程中,有一点代码的味道。

 类似资料:
  • 问题内容: 有什么办法可以使json.Unmarshal 不 接受不区分大小写的匹配?我收到带有标签的JSON,例如“ e”和“ E”,并想解组带有标签“ e”的对象,但忽略带有“ E”的对象。现在,我发现的唯一解决方案是定义一个包含两个标签的结构,然后简单地忽略标签“ E”,但是我正在寻找一种更清洁的解决方案。 从官方文档: 为了将JSON解组到结构中,Unmarshal将传入的对象键与Mars

  • 问题内容: 我在Matlab中目前具有以下结构的数据 其中item是来自i = 1 .. n的单元格,每个单元格包含多个属性的数据结构,每个属性均具有大小为2,j的矩阵,其中j = 1 .. m。属性的数量不是固定的。 我必须将此数据结构转换为python,但是我对numpy和python列表并不陌生。用numpy / scipy在python中构造此数据的最佳方法是什么? 谢谢。 问题答案: 我

  • 我在data-th-case=“${gt6}”上得到一个错误。在Thymeleaf有办法做到这一点吗? 提前谢了。

  • 问题内容: 我是Java的新手,我试图找到一种方法来在C语言中存储诸如结构之类的信息。例如,说我想让一名程序雇用员工。它将从用户那里获得一个名字,姓氏和ID号并将其存储起来。然后,用户可以根据条件查看该信息(例如,如果数据库有多于1名员工)。有没有人建议这样做的最佳方法? 问题答案: C中的结构就像Java中的类一样,功能更强大,因为Java中的类可以包含方法,而C ++可以。您创建一个新类。例如

  • 问题内容: 民间, 我连续第n次遇到相同的老问题。这是关于“如何轻松地将OOP结构映射到数据库表”。 这是一个场景:系统中有几种类型的“角色”-工人,雇主,联系人。它们具有某些共同的功能。其他部分则大不相同。所有参与者所处理的实体是“交流”,“注释”(管理员喜欢在客户身上留下注释)等。每种角色类型都处理大量其他类型的实体,而其他类型则不。 当前,我的数据库模式包括以下表: 演员: 工人 雇主 联系

  • 我正在尝试检查我的VO中设置了哪些值。 下面是我的女儿。我得到的是“合格的病例标签MyEnum.UserType.Doctors必须替换为不合格的枚举常量Doctors” EnumTest.java