我有一个从api调用返回的python字典文件。字典中键的拼写各不相同,无法预先知道拼写是什么。例如,api调用可以返回以下三个字典中的任何一个。
dict ={‘狗’:‘一些字符串’,‘猫’:‘一些字符串’}
dict ={‘野狗’:‘一些字符串’,‘猫’:‘一些字符串’}
dict ={‘狗’:‘一些字符串’,‘猫’:‘一些字符串’}
假设我想从字典中提取狗密钥的值值,而不知道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中这是可能的吗?
谢谢
发布于 2018-12-12 06:57:14
您可以通过myDict.keys()
免费访问myDict
的键(我强烈建议不要为您的变量使用built-in name )。
这意味着你可以这样做:
>>> myDict = { 'DOGS':'some string', 'Cat': 'some string' }
>>> [key for key in myDict.keys() if 'dogs' in key.lower()]
['DOGS']
--请注意,这必须返回一个列表,因为测试越松散,匹配多个键的可能性就越大。这种处理列表的单行形式称为。本质上,它通过处理输入列表的所有元素来创建一个新列表-在本例中是字典键列表。
要测试您的“键名称中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']
https://stackoverflow.com/questions/53733400
复制相似问题