Значения словаря слова 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
Ответы
Ответ 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