dict1={'s1':[1,2,3],'s2':[4,5,6],'a':[7,8,9],'s3':[10,11]}
如何獲得與's'關鍵字的所有值? 像dict1['s*']
得到的結果是dict1['s*']=[1,2,3,4,5,6,10,11]
如何通過python中的正則表達式獲得字典值
dict1={'s1':[1,2,3],'s2':[4,5,6],'a':[7,8,9],'s3':[10,11]}
如何獲得與's'關鍵字的所有值? 像dict1['s*']
得到的結果是dict1['s*']=[1,2,3,4,5,6,10,11]
如何通過python中的正則表達式獲得字典值
>>> [x for d in dict1 for x in dict1[d] if d.startswith("s")]
[1, 2, 3, 4, 5, 6, 10, 11]
,或者如果它需要一個正則表達式
>>> regex = re.compile("^s")
>>> [x for d in dict1 for x in dict1[d] if regex.search(d)]
[1, 2, 3, 4, 5, 6, 10, 11]
什麼你看到的是一個嵌套list comprehension。這是相當於
result = []
for d in dict1:
for x in dict1[d]:
if regex.search(d):
result.append(x)
因此,它是一個小低效的,因爲該正則表達式被測試方式過於頻繁(和元件所附逐個)。因此,另一種解決方案是
result = []
for d in dict1:
if regex.search(d):
result.extend(dict1[d])
>>> import re
>>> from itertools import chain
def natural_sort(l):
# http://stackoverflow.com/a/4836734/846892
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(l, key = alphanum_key)
...
使用水珠模式,'s*'
:
>>> import fnmatch
def solve(patt):
keys = natural_sort(k for k in dict1 if fnmatch.fnmatch(k, patt))
return list(chain.from_iterable(dict1[k] for k in keys))
...
>>> solve('s*')
[1, 2, 3, 4, 5, 6, 10, 11]
使用regex
:
def solve(patt):
keys = natural_sort(k for k in dict1 if re.search(patt, k))
return list(chain.from_iterable(dict1[k] for k in keys))
...
>>> solve('^s')
[1, 2, 3, 4, 5, 6, 10, 11]
下面我試圖希望它幫助你,通過獲得字典的鍵,然後如果第一個密鑰的索引是以字符開頭,然後用關鍵字典列表擴展列表。
n='s' # your start with character
result=[] # your output
for d in dict1.keys():
if n == d[0]:
result.extend(dict1[d])
print result