如何在Python中正确拆分特定字符串

时间:2017-07-22 16:03:46

标签: python python-2.7 split

我有列表字符串值,代表某些用户的id.age

users = ["1.20", "2.35", "3", "4", "5.", "6.30", "7."]

如何正确拆分以分别获取idage

请注意,我们有一些数据缺少age信息(例如"3""4"),更糟糕的是,我们只有id和一个点(例如"5.""7.")。

当然我可以使用分割功能,例如:

>>> "1.2".split('.')
['1', '2']
>>> "2".split('.')
['2']
>>> "3.".split('.')
['3', '']

但是,我需要检查每个结果。也许,这样的事情:

res = "3.".split('.')
id = int(res[0])
if len(res) > 1:
    if res[1] != "":
        age = int(res[1])

另一种选择是使用rpartition函数,例如:

>>> "1.2".rpartition('.')
('1', '.', '2')
>>> "2".rpartition('.')
('', '', '2')
>>> "3.".rpartition('.')
('3', '.', '')

但我仍然需要“手动”检查结果,在第二个示例中,应该是id的值位于age位置。 (例如('', '', '2'))。

是否有内置函数可以得到这样的结果?

>>> "1.2".some_split_function('.')
('1', '.', '2')
>>> "2".some_split_function('.')
('2', None, None)
>>> "3.".some_split_function('.')
('3', '.', None)

所以我可以在这样的循环中调用它:

for user_info in users:
    id, _, age = user_info.some_split_function('.')
    print int(id)
    if age is not None:
        print int(age)

2 个答案:

答案 0 :(得分:2)

是的,您只需使用partition代替rpartition

for user_info in users:
    id, _, age = user_info.partition('.')
    if age.isdigit():
        print int(age)

您需要将该条件从None更改为仅检查您是否适当地提取了一个数字。这将处理空字符串等...

一般而言,避免此问题的方法是首先不要像这样构建数据。

看到其他一些答案,没有理由做任何这么复杂的事情。如果你想要一个将id映射到年龄的功能解决方案,那么我会提倡这样的事情:

>>> {id: age or None for id, _, age in [user.partition(".") for user in users]}
{'1': '20', '3': None, '2': '35', '5': None, '4': None, '7': None, '6': '30'}

答案 1 :(得分:0)

请尝试以下操作,我们只会在u包含.时进行拆分,如果不包含u,则None为ID {1}}。

users = ["1.20", "2.35", "3", "4", "5.", "6.30", "7."]
data = []

for u in users:
    id, age = u.split('.') if '.' in u else [u, None]
    age = None if age == '' else age
    data.append({id: age})

如果您希望自己的ID为整数,只需在int()上调用id函数,如下所示:

data.append({int(id): age})

<强>输出:

>>> data
[{'1': '20'}, {'2': '35'}, {'3': None}, {'4': None}, {'5': None}, {'6': '30'}, {'7': None}]