Python字典优化这个纸条

2024-05-16 08:59:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于rdb_master_mongodb的字符串,其中rdb_是固定的,master是一个数据库名称,可以是任何东西,mongodb可以是mysqlmongodbpostgresmssqlbdb中的一个。我需要从字典中获取这个字符串的值,它的值在myDict[master][mongodb]中。为了得到这个,我需要分割字符串rdb_master_mongodb,并得到mastermongodb的值。我不能使用split,因为有时字符串会变成rdb_master_test_mongodb。因此,我必须使用endswith来获得确切的密钥。然而,endswith在列表上不起作用。你知道吗

我必须从一个元组中得到匹配的元组值。现在我这样做:

import re 
name = 'rdb_master_mongodb'
s = re.sub('rdb_', "", name)
VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
(a, b, c, d, e) = VALID_DB
if s.endswith(a):
   db = a
if s.endswith(b):
  db = b
if s.endswith(c):
  db = c
if s.endswith(d):
  db = d
if s.endswith(e):
  db = e
db_name = re.sub('_'+db, "", s)
print db_name+" is "+db

有没有更好的办法?你知道吗


Tags: 字符串nameremasterdbifmongodbmysql
3条回答

所以只有单词的结尾才有意义,如果我能很好地理解你,在这种情况下,我会尝试:

>>> VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
>>> name = 'rdb_master_mongodb'
>>> db_name = [db for db in VALID_DB if name.endswith(db)][0]
>>> db_name
'mongodb'
>>> name_test = 'rdb_master_test_mongodb'
>>> db_name = [db for db in VALID_DB if name_test.endswith(db)][0]
>>> db_name
'mongodb'
db = name.rsplit('_', 1)[1]
if db not in VALID_DB:
    raise ValueError('Incorrect DB name: %s' % db)

如果name的格式始终相同,则可以先将其拆分为多个部分:

rdb, temp = name.split('_', 1)
master, db = temp.rsplit('_', 1)

然后检查db是否有效:

VALID_DB = ('mysql', 'postgres', 'mongodb', 'mssql', 'bdb')
if db in VALID_DB:
   ...

然后使用这三个变量rdb, master, db构建所需的字符串。你知道吗

相关问题 更多 >