作者poototo (poototo)
看板Python
标题Re: [问题] 优化程式码,转成 dict
时间Sat Dec 3 10:17:31 2022
再补充
1. 用Comprehension,可与map, filter比较
d = {k: v for k, v in (L.split(' - ') for L in contents.splitlines() if L)}
----------------------------------------------------------------------------
2. 用re
资料来源的罗列呈现方式可能会变,届时分段或分隔符的逻辑就又要改
但最重要的资料本身,格式变动机率就小很多,如DNS,IP
所以用re主动抓几乎不会变的格式,未来逻辑改写机率低
另一好处是其他人看code也知道要的是什麽
(分段分隔只能知道资料的组织方式,但无法知道资料是甚麽,较为被动)
import re
regex_DNS = '-'.join(['[a-zA-Z]+']*4+['[0-9]+'])
regex_IP = '.'.join(['[0-9]{1,3}']*4)
regex_DNS_IP = '('+regex_DNS+').*?('+regex_IP+')'
d1 = dict(zip(re.findall(regex_DNS, contents), re.findall(regex_IP, contents)))
d2 = dict(re.findall(regex_DNS_IP, contents))
assert d1 == d2
※ 引述《cuteSquirrel (可爱的小松鼠)》之铭言:
: https://pastebin.com/XAfGA0iY
: import urllib.request
: url = "https://admin.quic.cloud/api/dnslist"
: contents = urllib.request.urlopen(url).read().decode('utf-8')
: # 得到每一行
: str_contents = contents.splitlines()
: # 用网页上的 空白 短杠 空白 切割每一行
: parsing = lambda s:s.split(' - ')
: # DNS_dict: python dictionary
: # DNS名字当作 key
: # IP位置当作 value
: DNS_dict = dict( [ *map(parsing, str_contents) ] )
: print( DNS_dict )
: ======================================================
: 各位前辈好。
: 下面的程式码可以执行
: 但我总得感觉起来没有利落的感觉
: 好像用任何程式语言都可以写出类似的东西
: 可以请前辈指点一二。
: 希望将网页的结果转成单纯的 temp dict
: import urllib.request
: url = "https://admin.quic.cloud/api/dnslist"
: contents = urllib.request.urlopen(url).read().decode('utf-8')
: str_contents = contents.split('\n')
: temp = dict()
: for i in str_contents:
: if i == '':
: continue
: cdn, ip = i.split(' - ')
: temp[cdn] = ip
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.13.182 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1670033854.A.A5E.html
1F:推 wadd: 谢谢前辈指点,又学到很多招 01/20 03:41