如何检查字典中的动态键?
How to check dynamic key in dictionary?
我有 python 包含动态键的字典。
例如:
{
'gadget_1': 1, 'gadget_23': 4, 'manufacture_1': 6, 'manufacture_23': 3,
'gadget_56': 34, 'name': 'xyz', 'price': 23, 'phone': '45345'
}
这是我的字典,其中的关键字符串总是类似于“gadget_”或“manufacture_”,然后它会有一些示例中给出的从 1 到 100 或 200 的序列号。
那么我怎样才能只获得那些包含“gadget_”或“manufacture_”的密钥。
我知道我可以简单地通过循环来完成,但这不是一个好方法。
提前致谢。
>>> 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']
我建议使用正则表达式来确保您不会像这样得到误报
>>> 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_
开头并后跟 1 个或多个小数位的字符串。
您需要使用循环进行迭代,此函数完成工作,它获取字典和 returns 字典,其中的键以 gadget_ 或 manufacture_ 开头:
def get_by_keys(d):
return {k:v for k,v in d.iteritems() if k.startswith(('gadget_', 'manufacture_'))}
我有 python 包含动态键的字典。
例如:
{
'gadget_1': 1, 'gadget_23': 4, 'manufacture_1': 6, 'manufacture_23': 3,
'gadget_56': 34, 'name': 'xyz', 'price': 23, 'phone': '45345'
}
这是我的字典,其中的关键字符串总是类似于“gadget_”或“manufacture_”,然后它会有一些示例中给出的从 1 到 100 或 200 的序列号。
那么我怎样才能只获得那些包含“gadget_”或“manufacture_”的密钥。
我知道我可以简单地通过循环来完成,但这不是一个好方法。
提前致谢。
>>> 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']
我建议使用正则表达式来确保您不会像这样得到误报
>>> 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_
开头并后跟 1 个或多个小数位的字符串。
您需要使用循环进行迭代,此函数完成工作,它获取字典和 returns 字典,其中的键以 gadget_ 或 manufacture_ 开头:
def get_by_keys(d):
return {k:v for k,v in d.iteritems() if k.startswith(('gadget_', 'manufacture_'))}