我有消費者列表:檢索值
API_CONSUMERS = [{'name': 'localhost',
'host': '127.0.0.1:5000',
'api_key': 'Ahth2ea5Ohngoop5'},
{'name': 'localhost2',
'host': '127.0.0.1:5001',
'api_key': 'Ahth2ea5Ohngoop6'}]
而且我有一個主機變量:
host = '127.0.0.1:5000'
我想:
- 檢查主機位於API_CONSUMERS列表中的值中,則
- 如果主機存在,則檢索
api_key
在別處使用。
本來我是檢查主機值是這樣的:
if not any(consumer['host'] == host for consumer in API_CONSUMERS):
#do something
但後來意識到檢索api_key
我將不得不通過每個消費者循環無論如何,所以還不如將二者結合起來:
for consumer_info in API_CONSUMERS:
if consumer_info['host'] == host:
consumer = consumer_info
if not consumer:
#do something
這樣做的最好方法是什麼?我覺得我所做的不是「pythonic」。
解決方案
try:
api_key = next(d['api_key'] for d in consumers if d['host'] == host)
except StopIteration:
#do something
主機值是否始終是唯一的?如果是這樣的話,字典詞典是以主機作爲關鍵字的更好的數據類型。 –
是的,主機值始終是唯一的。 –