【问题标题】:How do I replace randomly positioned 3 digit letter values with a number in Python?如何用 Python 中的数字替换随机定位的 3 位字母值?
【发布时间】:2014-09-08 17:31:18
【问题描述】:

编辑:已解决

对不起,如果这是一个菜鸟问题,我尝试了谷歌、IRC,并在经过相当多的努力后自己无法弄清楚之后在其他任何地方询问。

无论如何,我正在尝试用我的程序中的值替换月份名称。所有月份都是 3 个字母长。

所以我想用 Jan, Feb, .. Dec 换句话,用 01,02, .. 12 替换它们

问题是,它们现在被放置在一个大字符串中,日期的其余部分以数字形式放置,并且月份之间没有确切的距离。

我该怎么做?

这是我正在尝试做的一个可视示例:

假设你有字符串 'abcdefghijklmnop' 在哪里 'bcd','fgh', and 'nop' are values 01,02,and 03 respectively.

我想将字符串返回为:

a01e02ijklm03

到目前为止,我所能做的只是一次对 3 个字母进行排序并根据字典测试它们的值,但第二次我遇到非字典值(几乎是立即)它给了我一个错误并停止.

有人可以帮忙吗?

下面我刚刚提到的断码:

#filterTwo changes month names into numbers (ex: Jan -> "01", Dec -> "02", ..)
month_dictionary = {
    'Jan':  "01",
    'Feb':  "02",
    'Mar':  "03",
    'Apr':  "04",
    'May':  "05",
    'Jun':  "06",
    'Jul':  "07",
    'Aug':  "08",
    'Sep':  "09",
    'Oct':  "10",
    'Nov':  "11",
    'Dec':  "12"
}

filterTwo = ''
words = []
for start in range(0, len(filterOne),3):
    words.append(filterOne[start:(start + 3)])
for word in words:
    filterTwo += "%s" % (month_dictionary[word])
print filterTwo

【问题讨论】:

  • 为什么不在访问字典之前做一个 if 检查呢? if word in month_dictionary: filterTwo += ... 我不确定您的代码是否能正常工作,您正在检查每 3 个字符,例如索引 0,3,6,9... 但是如果月份从索引 2,4 开始... ?
  • 第一部分的好主意,不敢相信我没有考虑过,哈哈。至于 2,4 索引部分,您也绝对正确,我承认这一点,但我不确定如何修复它。我想发布我所拥有的一切,尽管以表明我并没有试图让其他人为我做所有的工作。

标签: python regex string dictionary


【解决方案1】:
for month_name,month_number in month_dictionary.items():
    filterOne.replace(month_name,month_number)
print filterOne

【讨论】:

    【解决方案2】:
    s = 'abcdefghijklmnop'
    d = {'ab':'1', 'ij':'3'}
    for i in d:
        s = s.replace(i, d[i])
    

    输出

    '1cdefgh3klmnop'
    

    【讨论】:

    • 这看起来正是我正在寻找的,谢谢!我现在正在扼杀实施,但我敢肯定这只是一个错字。非常感谢:) 编辑:得到它的工作,太棒了!再次得到很好的答案,谢谢!
    猜你喜欢
    • 2012-06-24
    • 2015-07-05
    • 2017-05-16
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 2013-04-12
    • 2017-10-10
    相关资源
    最近更新 更多