Подтвердить что ты не робот

Значения словаря слова Python для ключей с использованием регулярного выражения

Я пытаюсь реализовать для поиска значения в словаре Python для определенных значений ключа (используя регулярное выражение как ключ).

Пример:

У меня есть словарь Python, который имеет такие значения, как:

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

Мне нужно искать значения, у которых есть "продавец_account"? Я написал образец программы, но хотел бы знать, можно ли что-то сделать лучше. Основная причина в том, что я не уверен в регулярном выражении и пропущу что-то (например, как установить re для ключа, начинающегося с "seller_account" ):

#!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
4b9b3361

Ответ 1

Если вам нужно только проверить ключи, начинающиеся с "seller_account", вам не нужно регулярное выражение, просто используйте startwith()

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() на items() и не забудьте добавить () для print.

Ответ 2

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

Ответ 3

Вы можете решить это с помощью dpath.

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

dpath позволяет вам искать словари с синтаксисом glob на клавишах и фильтровать значения. То, что вы хотите, тривиально:

$ 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