如何在字典中检查动态密钥?

时间:2015-01-03 10:33:54

标签: python python-2.7 dictionary

我有python字典,其中包含动态密钥。

例如:

{
    'gadget_1': 1, 'gadget_23': 4, 'manufacture_1': 6, 'manufacture_23': 3,
    'gadget_56': 34, 'name': 'xyz', 'price': 23, 'phone': '45345'
}

这是我的字典,其中键字符串始终类似于“小工具_ ”或“制作_ ”,然后它会有一些序号从1到100或200如例子中所示。

那么我怎样才能获得包含'小工具_ '或'制造_ '的那些密钥。

我知道我可以通过循环来完成它,但这不是一个好方法。

提前致谢。

3 个答案:

答案 0 :(得分:2)

>>> d = {
    'gadget_1': 1, 'gadget_23': 4, 'manufacture_1': 6, 'manufacture_23': 3, 'gadget_56': 34,
    'name': 'xyz', 'price': 23, 'phone': '45345'
 }
>>> [k for k in d if k.startswith(('gadget_', 'manufacture_'))]
['gadget_23', 'gadget_56', 'manufacture_23', 'manufacture_1', 'gadget_1']

相依: 哇,我刚才注意到这是Python中的有效语法

[k for k in d if True if True if True]
['phone', 'gadget_23', 'gadget_56', 'manufacture_23', 'manufacture_1', 'gadget_1', 'price', 'name']

答案 1 :(得分:2)

我建议使用正则表达式以确保不会出现误报,例如

>>> data = {
    'gadget_1': 1, 'gadget_23': 4, 'manufacture_1': 6, 'manufacture_23': 3,
    'gadget_56': 34, 'name': 'xyz', 'price': 23, 'phone': '45345'
}
>>> import re
>>> regex = re.compile(r'(manufacture_|gadget_)\d+')
>>> [key for key in data if regex.match(key)]
['gadget_23', 'gadget_56', 'manufacture_23', 'manufacture_1', 'gadget_1']

正则表达式(manufacture_|gadget_)\d+确保它匹配任何以manufacture_gadget_开头并后跟一个或多个十进制数字的字符串。

答案 2 :(得分:2)

你需要循环迭代,这个函数完成工作,它获取字典并返回一个字典,其中的键以gadget_开头或制造_:

def get_by_keys(d):
    return {k:v for k,v in d.iteritems() if k.startswith(('gadget_', 'manufacture_'))}