Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查字典中的动态键?_Python_Python 2.7_Dictionary - Fatal编程技术网

Python 如何检查字典中的动态键?

Python 如何检查字典中的动态键?,python,python-2.7,dictionary,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' } 这是我的字典,其中键字符串总是类似于“gadget”或“manufacture”,然后它将有一些从1到100或200的序列号,如示例所示 因此,如何仅获取包含“

我有一个包含动态键的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的序列号,如示例所示

因此,如何仅获取包含“小工具”或“制造”的密钥

我知道我可以简单地循环,但这不是一个好办法

提前谢谢

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

无关的: 哇,我刚刚注意到这在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\u124; gadget\ud+
确保它匹配任何以
manufacture\ucode>或
gadget\ucode>开头,后跟一个或多个十进制数字的字符串。

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

>>> 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\u124; gadget\ud+
确保它匹配任何以
manufacture\ucode>或
gadget\ucode>开头,后跟一个或多个十进制数字的字符串。

您需要使用循环进行迭代,此函数完成此任务,它获取字典并返回一个字典,其中的键以gadget或manufacture开头:

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

您需要使用循环进行迭代,此函数完成任务,它将获取字典并返回一个字典,其中包含以gadget或manufacture开头的键:

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