>>> [x for x in lis if x['name'] == 'some_content']
[{'score': 31, 'name': 'some_content', 'numrep': 10}]
>>> [x['score'] for x in lis if x['name'] == 'some_content']
[31]
>>> next(x['score'] for x in lis if x['name'] == 'some_content')
31
>>> next(x['score'] for x in lis if x['name'] == 'ome_content')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> next((x['score'] for x in lis if x['name'] == 'no-such-content'), 'fallback')
'fallback'
from collections import defaultdict
lis = [{'score': 12, 'name': 'random_content', 'numrep': 11}, {'score': 31, 'name': 'some_content', 'numrep': 10}]
dic = defaultdict(dict)
for d in lis:
for k,v in ((k,v) for k,v in d.iteritems() if k != 'name'):
dic[d['name']][k] = v
使用列表压缩,生成器表达式:
最好在这里使用
dict
快速查找任何'name'
:现在
dic
看起来像:在
O(1)
时间内获得'some_content'
的分数:相关问题 更多 >
编程相关推荐