我有一个不同名字的清单。我有一个脚本打印出列表中的名称。
req=urllib2.Request('http://some.api.com/')
req.add_header('AUTHORIZATION', 'Token token=hash')
response = urllib2.urlopen(req).read()
json_content = json.loads(response)
for name in json_content:
print name['name']
输出:
Thomas001
Thomas002
Alice001
Ben001
Thomas120
我需要找到托马斯这个名字附带的最大数字。是否有一种简单的方法可以为包含" Thomas"的所有元素应用regexp?然后将max(list)应用于它们?我想出的唯一方法是遍历列表中的每个元素,匹配托马斯的正则表达式,然后去掉字母并将剩余的数字放到新的列表中,但这看起来相当笨重。
答案 0 :(得分:2)
你不需要去正则表达式。只需将结果存储在列表中,然后对其应用sorted
函数。
>>> l = ['Thomas001',
'homas002',
'Alice001',
'Ben001',
'Thomas120']
>>> [i for i in sorted(l) if i.startswith('Thomas')][-1]
'Thomas120'
答案 1 :(得分:2)
您不需要正则表达式,也不需要排序。如你所说,max()
没问题。为了安全起见,如果列表包含“Thomasson123”之类的名称,您可以使用:
names = ((x['name'][:6], x['name'][6:]) for x in json_content)
max(int(b) for a, b in names if a == 'Thomas' and b.isdigit())
第一个赋值创建一个生成器表达式,因此序列上只有一个遍历才能找到最大值。