-2

私は2つの辞書を持っています。

mydict1 ={                                                                                           
    'Better' : {'vara1':'vala1', 'varb1':'valb1'},                                                                                   
    'BetterThanBest' : {'vara2':'vala2', 'varb2':'valb2'} }

mydict2 = {                                                                                                                                                            
    '/check12/BetterThanBest':'/dir3/BetterThanBest' }                                                                                                                                                                

for i in mydict2 :                                                                                                                                                     
    for pattern in mydict1.keys() :                                                                                                                                    
        if pattern in i : 
           print pattern, i                                                                                                  
           # Do something for i, 
           # but don't want multiple matches to i, just the best 

これは次を返します:

 Better /check12/BetterThanBest
 BetterThanBest /check12/BetterThanBest

mydict1のキー、つまり上記の場合は「BetterThanBest」と完全に一致するものを見つけたいと思います。出来ますか ?

ご回答ありがとうございます。

4

4 に答える 4

1
In [43]: mydict1 ={                                                                                           
   ....:     'Better' : {'vara1':'vala1', 'varb1':'valb1'},                                                                                   
   ....:     'BetterThanBest' : {'vara2':'vala2', 'varb2':'valb2'} }

In [44]: mydict2 = {                                                                                                                                                            
   ....:     '/check12/BetterThanBest':'/dir3/BetterThanBest' }

In [51]: keys1=sorted(list(mydict1),key=len,reverse=True) #sort the keys by length, descending order

In [52]: keys2=sorted(list(mydict2),key=len,reverse=True) #sort the keys by length, descending order

In [54]: [x for x in keys1 for y in keys2 if x in y][0]
Out[54]: 'BetterThanBest'
于 2012-09-10T15:26:00.433 に答える
0

startswithとで貧乏人の固定を試みることもできますendswithが、実際には、正規表現または候補文字列のトークン化による完全な同等性チェックを使用して、希望どおりに正確に一致させることをお勧めします。または、順序付けられたキーストアを使用し、スーパーセット>サブセット>サブセットに基づいて検索用語を整理し、最初の検索で検索ルーチンを終了します。いくつかの仮定をする:

pattern_dict = {'Better' : {'vara1':'vala1', 'varb1':'valb1'},                                                                                   
                'BetterThanBest' : {'vara2':'vala2', 'varb2':'valb2'}}
candidate_dict = {'/check12/BetterThanBest':'/dir3/BetterThanBest' } 
for candidate, candidate_value in candidate_dict.iteritems():
    try:
        match_pattern = pattern_dict[candidate.rsplit('/', 1)[-1]]
    except KeyError:
        pass
    else:
        # do stuff for each matched candidate and it's matched pattern dict
于 2012-09-10T15:15:38.873 に答える
0

あなたの要件は私にはあまり明確ではないのではないかと思いますが、あなたがしたいことはのキーmydict1の最後の単語とmydict2/単語の区切り文字である)一致することであると仮定して、これが私がそれにアプローチする方法です。

d2_keys = dict((k.rsplit('/', 1)[-1], k) for k in mydict2)
for k in my_dict1:
  if k in d2:
    print k, d2[k]

これは何をしますか:

  1. まず、d1の各キーから抽出された単語をmydict2元の値にマップする新しいdictを作成します。これにより、キーを抽出された単語とすばやく比較したり、元の値にマッピングしたりできます。

    >>> d2 = dict((k.rsplit('/', 1)[-1], k) for k in mydict2)
    >>> d2
    {'BetterThanBest': '/check12/BetterThanBest'}
    
  2. 次に、のキーを繰り返し処理し、キーをmydict1と比較しますd2

警告:これは、キーのmydict2結果が重複する単語になった場合に期待どおりに機能するようになりました。

于 2012-09-10T15:25:41.397 に答える
0

OK、なぜこのすべての否定的な点がこの質問に当てはまるのかわかりませんが、私は次のことを試しましたが、それは私が望むことをします:

mydict1 ={                                                                                                                                                             
    'Better' : {'var1':'vala1', 'var2':'valb1'},                                                                                                                       
    'BetterThanBest' : {'var1':'vala2', 'var2':'valb2'}                                                                                                                
    }                                                                                                                                                                  
mydict2 = {                                                                                                                                                            
   '/check12/BetterThanBest':'/dir3/BetterThanBest'                                                                                                                   
   }                                                                                                                                                                  

for i in mydict2 :                                                                                                                                                     
    pat ='a'                                                                                                                                                           
    for pattern in mydict1.keys() :                                                                                                                                    
        if pattern in i and pattern.__len__() > pat.__len__():                                                                                                         
            pat = pattern                                                                                                                                              

    print pat
    print mydict1[pat]["var1"]                                                                                                                                         
于 2012-09-10T15:47:14.330 に答える