44

Python辞書で特定のキー値の値を検索するように実装しようとしています(正規表現をキーとして使用)。

例:

次のような値を持つPython辞書があります。

{'account_0':123445,'seller_account':454545,'seller_account_0':454676, 'seller_account_number':3433343}

キーが「seller_account」の値を検索する必要がありますか? サンプルプログラムを書きましたが、もっとうまくできるかどうか知りたいです。主な理由は、正規表現がわからず、何かを見逃していることです (「seller_account」で始まるキーに re を設定する方法など):

#!usr/bin/python
import re
my_dict={'account_0':123445,'seller_account':454545,'seller_account_0':454676, 'seller_account_number':3433343}

reObj = re.compile('seller_account')

for key in my_dict.keys():
        if(reObj.match(key)):
                print key, my_dict[key]

~ home> python regular.py

seller_account_number 3433343
seller_account_0 454676
seller_account 454545
4

5 に答える 5

53

で始まるキーのみを確認する必要がある場合は"seller_account"、正規表現は必要ありません。startswith()を使用してください。

my_dict={'account_0':123445,'seller_account':454545,'seller_account_0':454676, 'seller_account_number':3433343}

for key, value in my_dict.iteritems():   # iter on both keys and values
        if key.startswith('seller_account'):
                print key, value

またはワンライナーの方法で:

result = [(key, value) for key, value in my_dict.iteritems() if key.startswith("seller_account")]

注意: python 3.X で使用する場合は、 に置き換えiteritems()て、 foritems()を追加することを忘れないでください。()print

于 2012-05-29T09:03:28.433 に答える
10

これは dpath で解決できます。

http://github.com/akestersson/dpath-python

dpath を使用すると、キーのグロブ構文を使用して辞書を検索し、値をフィルター処理できます。あなたが望むのは些細なことです:

$ easy_install dpath
>>> dpath.util.search(MY_DICT, 'seller_account*')

...それは、そのグロブに一致するすべてのキーの大きなマージされた辞書を返します。パスと値だけが必要な場合:

$ easy_install dpath
>>> for (path, value) in dpath.util.search(MY_DICT, 'seller_account*', yielded=True):
>>> ... # do something with the path and value
于 2013-05-12T14:16:25.777 に答える
8
def search(dictionary, substr):
    result = []
    for key in dictionary:
        if substr in key:
            result.append((key, dictionary[key]))   
    return result

>>> my_dict={'account_0':123445,'seller_account':454545,'seller_account_0':454676, 'seller_account_number':3433343}
>>> search(my_dict, 'seller_account')
[('seller_account_number', 3433343), ('seller_account_0', 454676), ('seller_account', 454545)]
于 2012-05-29T09:01:48.807 に答える