如何使用从python中的dict中提取具有特定模式的键列表?

时间:2014-10-05 16:38:50

标签: python list python-2.7 dictionary

我需要能够提取所有具有类型名称的键的列表: carro_X ,其中X是一个数字。产量:

lista = ['carro_1','carro_2','carro_50']

从:

diccionario = {
    'carro_1':'renault',
    'carro_2':'audi',
    'carro_50':'sprint',
    'camioneta':'tucson'
}

3 个答案:

答案 0 :(得分:2)

如何使用str.startswith

使用list comprehension(无需使用iterkeyskeys方法;迭代字典yeidls密钥):

>>> diccionario={
...     'carro_1':'renault',
...     'carro_2':'audi',
...     'carro_50':'sprint',
...     'camioneta':'tucson',
... }
>>> [key for key in diccionario if key.startswith('carro_')]
['carro_1', 'carro_50', 'carro_2']

注意字典没有订单。如果您想要有序的结果,则需要对结果进行排序。

>>> sorted(['carro_1', 'carro_50', 'carro_2'], key=lambda key: int(key.split('_')[1]))
['carro_1', 'carro_50', 'carro_2']

<强>更新

更正确的是,我应该考虑数字部分。使用str.isdigit检查字符串是否由数字组成。

>>> [key for key in diccionario
...     if key.startswith('carro_') and key.split('_', 1)[1].isdigit()]
['carro_1', 'carro_50', 'carro_2']

答案 1 :(得分:1)

import re

pattern = re.compile(r'^carro_[0-9]+$')  # !match "SUBMARINE_carro_007Tutti a posto"

key_arr = [key for key in diccionario if pattern.match(key)]

请记住编译模式一次并重复使用它:)

答案 2 :(得分:0)

如果您只想获取carro X,请编辑字典并使用它:

carro = {
    1:'renault',
    2:'audi',
    50:'sprint'
}

print carro[50];
print carro[2];