有没有一种方法可以在python 2.7中使用通配符来搜索python字典?

时间:2018-12-11 22:36:02

标签: python-2.7

我有一个从api调用返回的python字典文件。字典中各键的拼写各不相同,无法提前知道该拼写是什么。例如,下面的三个词典中的任何一个都可以从api调用中返回。

dict = { 'dogs':'一些字符串', 'cats':'一些字符串' }

dict = { 'wild dogs':'some string', '猫':'一些字符串' }

dict = { 'DOGS':'一些字符串', 'Cat':'一些字符串' }

如果说我想从字典中提取狗密钥的值,而又不知道api将返回哪个字典。我怎样才能做到这一点?我可以使用通配符搜索吗? 现在,我使用了一堆类似的if语句:

for dict_key in dict:
  if dict_key == 'dogs':
    value = dict['dogs']
    return value
  elif dict_key == 'wild dogs':
    value = dict['wild dogs']
    return value
  elif dict_key == 'DOGS':
    value = dict['DOGS']
    return value

但这不是很有效,因为“ dog”有许多可能的排列,执行起来不是很省时。我想知道我是否可以做这样的事情

for dict_key in dict:
 if dict_key contains the letters 'd', 'o' and 'g' regardless of capitalization:
   get the correct_key
   return dict[correct_key]

或类似的内容。在python中完全可能吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以通过myDict自由访问myDict.keys()的键(因为我强烈建议不要为变量使用built-in name)。

这意味着您可以执行以下操作:

>>> myDict = { 'DOGS':'some string', 'Cat': 'some string' }
>>> [key for key in myDict.keys() if 'dogs' in key.lower()]
['DOGS']

-请注意,这肯定会返回一个 list ,因为测试越宽松,匹配多个键的机会就越大。这种处理列表的单行形式称为 list comprehension 。本质上,它通过处理输入列表的所有元素(在本例中为字典键列表)来创建新列表。

要测试“密钥名中任何位置的dog的所有字母”,请使用以下命令:

>>> [key for key in myDict.keys() if all(char in key.lower() for char in 'dog')]
['DOGS']
>>> [key for key in myDict.keys() if all(char in key.lower() for char in 'act')]
['Cat']

对于列表理解,访问字典时的默认设置是使用其keys,因此您实际上可以将其省略:

>>> myDict = { 'wild dogs':'some string', 'Cats' :'some string' }
>>> [key for key in myDict if all(char in key.lower() for char in 'dog')]
['wild dogs']

要立即检索关联的键值,只需添加其字典名称:

>>> [myDict[key] for key in myDict.keys() if all(char in key.lower() for char in 'dog')]
['some string']