我有一个从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中完全可能吗?
谢谢
答案 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']