4
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]

4

3 に答える 3

3
>>> 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]
于 2013-08-03T08:27:10.743 に答える
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
于 2013-08-03T09:21:09.623 に答える