.rsplit() | return empty string instead of `IndexError: list index out of range`

.rsplit() | return empty string instead of `IndexError: list index out of range`

是否有一个 return 是空字符串 "" 并且不会崩溃的替代函数,而不是 rsplit()

我想 return "second-half" key 的字符串,并将其放在相应 value的字符串。但是,密钥名称中并不总是包含 ~

如果它没有 "标签": ~tag,那么我想 return 一个空字符串.

注意:如果没有字典理解,这可能会更容易:

import random

DLM = '~'

programmatic_dict = {key: '{} {} {}'.format(val, DLM, key.rsplit(DLM, 1)[1]) if random.randint(0,9) == 9 else val for key, val in programmatic_dict.items()}  # 10% tag

最小代码:(导致与上述代码相同的错误)。

thisdict = {
  "brand~tag": "Ford",
  "model~tag": "Mustang",
  "year": 1964
}

DLM = '~'

for k in thisdict.keys():
    print(k.rsplit(DLM, 1)[1])

输出:

tag
tag
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-29-036aa5073b32> in <module>
      6 
      7 for k in thisdict.keys():
----> 8     print(k.rsplit(DLM, 1)[1])

IndexError: list index out of range

如果我还有什么要补充的,请告诉我post。

如果您确实需要手头的标签,或者空字符串,请编写您自己的匹配函数,最好基于正则表达式。示例:

import re

thisdict = {
  "brand~test": "Ford",
  "model~test": "Mustang",
  "year": 1964
}


r = re.compile(r".+(~.+)")


def my_match(k):
    m = r.match(k)
    if m:
        return m[1][1:]
    else:
        return ""


for k in thisdict.keys():
    print(my_match(k))