我有一个简单的字典清单,如下所示。
data_records = [{'client': 'AAA',
'keys': ['k001', 'k002'],
'server_name': 'server00',
'db_name': 'db-aaa',
},
{'client': 'BBB',
'keys': [],
'server_name': 'server01',
'db_name': 'db-bbb',
},
{'client': 'CCC',
'keys': ['k003', 'k004', 'k005', 'k006'],
'server_name': 'server02',
'db_name': 'db-ccc',
},
]
我正在尝试编写一个使用任何键“ client”或“ keys”并从上述列表中提取相应的“ server_name”和“ db_name”的函数。
def get_data()
"""
Look up the server_name and db_name based on the given 'key' or 'client' and return Tuple of strings (server_name, db_name)
"""
get_data(client_id='AAA')
get_data(session_key='k004')
get_data(session_key='')
感谢有人可以告诉我该怎么写 get_data()函数以一种简单的方式。谢谢!
答案 0 :(得分:2)
const oops = m3.join(); // error!
/* The 'this' context of type 'Maybe<number>' is not assignable to method's
'this' of type 'Maybe<Maybe<unknown>>'. Type 'number' is not assignable
to type 'Maybe<unknown>'. */
答案 1 :(得分:2)
您将要遍历记录列表并检查它们的值。客户端搜索与按键搜索稍有不同。您还应该考虑返回多个值的搜索值。尝试这样的事情:
def get_data(client_id=None, session_key=None):
# validate inputs
if client_id is None and session_key is None:
raise Exception("One search parameter must be supplied")
if client_id is not None and session_key is not None:
raise Exception("Only one search parameter can be supplied")
# container to store all matches
results = []
# the client_id case
if client_id is not None:
for data_record in data_records:
if client_id == data_record['client']:
results.append(
(data_record['server_name'], data_record['db_name'])
)
# the session_key case
if session_key is not None:
for data_record in data_records:
if session_key in data_record['keys']:
results.append(
(data_record['server_name'], data_record['db_name'])
)
return results
如果您想将两个搜索结合起来,那么您还可以执行以下操作:
def get_data(client_id=None, session_key=None):
# validate inputs
if client_id is None and session_key is None:
raise Exception("At least one search parameter must be supplied")
# container to store all matches
results = []
# If a filter is active and doesn't match,
# skip the record and don't add the value
for data_record in data_records:
if client_id is not None:
if client_id != data_record['client']:
continue
if session_key is not None:
if session_key not in data_record['keys']:
continue
results.append(
(data_record['server_name'], data_record['db_name'])
)
return results
只是为了好玩,在列表理解中做到这一切:
def get_data(client_id=None, session_key=None):
# validate inputs
if client_id is None and session_key is None:
raise Exception("At least one search parameter must be supplied")
return [
(record['server_name'], record['db_name'])
for record in data_records
if (client_id is None or client_id == record['client'])
and (session_key is None or session_key in record['keys'])
]
如果您想让搜索参数为空并仅返回第一个值,那么您也可以这样做:
def get_data(client_id=None, session_key=None):
results = (
(record['server_name'], record['db_name'])
for record in data_records
if (client_id is None or client_id == record['client'])
and (session_key is None or session_key in record['keys'])
)
return next(results, None)
答案 2 :(得分:1)
java -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/etc/SQLJDBCDriver.conf myApplication.jar
输出
> Create table Teams (
> Id integer
> ,Name varchar(20) );
>
> Create table Games (
> HomeTeamId integer
> ,VisitingTeamId integer
> ,HomeTeamWon boolean );
>
> Insert Into Teams(Id, Name) Values (1, 'Real Madrid');
> Insert Into Teams(Id, Name) Values (2, 'Manchester City');
> Insert Into Teams(Id, Name) Values (3, 'Juventus');
>
> Insert Into Games(HomeTeamId, VisitingTeamId, HomeTeamWon) Values (1,
> 2, True);
>
> Select
> HT.Name HomeTeam
> ,VT.Name VisitingTeam
> ,Case when HomeTeamWon Then HT.Name Else Vt.Name End WinningTeam
> From
> Games G inner join
> Teams HT on (G.HomeTeamId = HT.Id) inner join
> Teams VT on (G.VisitingTeamId = VT.Id)