[英]How to properly split a specific string in Python
我有一个表示某些用户的id.age
的字符串值列表 :
users = ["1.20", "2.35", "3", "4", "5.", "6.30", "7."]
如何正确分割它以分别获得id
和age
?
请注意,我们有一些缺少age
信息的数据(例如"3"
和"4"
),更糟糕的是,我们有一些仅包含id
和点的数据(例如"5."
和"7."
)。
当然可以使用split函数,例如:
>>> "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)
是的,您只使用partition
而不是rpartition
。
for user_info in users:
id, _, age = user_info.partition('.')
if age.isdigit():
print int(age)
您需要将该条件从“ None
更改为仅检查是否已正确提取数字。 这将解决空字符串等问题。
通常,避免此问题的方法是首先不要像这样构造数据。
看到其他一些答案,没有理由做那么复杂的事情。 如果您想要一个将id映射到age的功能解决方案,那么我建议使用以下方法:
>>> {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'}
请尝试以下操作,我们仅在包含时才拆分u
.
如果不是, u
是id和年龄被分配None
。
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为整数,只需对id
调用int()
函数,如下所示:
data.append({int(id): age})
输出:
>>> data
[{'1': '20'}, {'2': '35'}, {'3': None}, {'4': None}, {'5': None}, {'6': '30'}, {'7': None}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.