2013-08-03 28 views

回答

6
>>> [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]) 
2
>>> 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] 
3

下面我試圖希望它幫助你,通過獲得字典的鍵,然後如果第一個密鑰的索引是以字符開頭,然後用關鍵字典列表擴展列表。

n='s' # your start with character 
result=[] # your output 

for d in dict1.keys(): 
    if n == d[0]: 
     result.extend(dict1[d]) 

print result