0

私が達成しようとしているのは、特定のパターンでリスト内のアイテムを配置することです。たとえば、次の辞書があります。

>>>dict_a = {
       'north' : 'N',
       'south' : 'S',
       'east' : 'E',
       'west' : 'W',
       'north east' : 'NE',
       'north west' : 'NW'
   }

文字列に上記の辞書の項目が含まれているかどうかを確認するには、次のようにします。

>>>string_a = 'North East Asia'
>>>list_a = []
>>>for item in dict_a:
       if item in string_a.lower():
           list_a.append(item)

そして、次のような結果が得られます。これは理にかなっています

>>>['north', 'north east', 'east']

しかし、私が取得したいのは、および['north east']無視することです。どうすればこれを達成できますか?northeast

4

3 に答える 3

5

difflib.closest_match を試す

>>> dict_a = {
       'north' : 'N',
       'south' : 'S',
       'east' : 'E',
       'west' : 'W',
       'north east' : 'NE',
       'north west' : 'NW'
   }
>>> import difflib
>>> string_a = 'North East Asia'
>>> dict_a[difflib.get_close_matches(string_a, dict_a.keys())[0]]
'NE'
于 2013-01-16T10:01:48.797 に答える
3

OrderedDictキーと値のペアを一貫した順序で格納する (Python 2.7+ の新機能) を使用できます。1 つの結果を取得するには、最初の一致の後にループを中断します。

import collections

# create the mapping with the desired order of matches
dict_a = collections.OrderedDict([
    ('north east', 'NE'),
    ('north west', 'NW'),
    ('north', 'N'),
    ('south', 'S'),
    ('east', 'E'),
    ('west', 'W'),
])

string_a = 'North East Asia'
list_a = []
for item in dict_a:
    if item in string_a.lower():
        list_a.append(item)
        break  # found something
于 2013-01-16T10:11:32.480 に答える
2
>>> max(['north', 'north east', 'east'], key=len)
'north east'
于 2013-01-16T09:59:05.510 に答える