在Python使用字典处理相关数据时,如果我们有了key值,是很容易获取字典对应key值的value的,这就好比用钥匙开锁一样简单。但是反之,也就是根据value去获取对应的key值并不那么直接。
在实际工作中,尤其是当key和value具有一对一的关系的时候,此时根据value来提取key就变得很重要。这是因为此时key和value都是唯一的,二者均可以作为查找的索引。
接下来,就让我们来探索一下根据value如何从字典中提取key的功能吧。
首先,我们将创建一个字典以进行样例说明。
如下所示,currency_dict 是以货币缩写为key,以货币名称为value的字典。
currency_dict={'USD':'Dollar',
'EUR':'Euro',
' GBP':'Pound',
'CNY':'Chinese'}
如果我们有key,只需在方括号内添加key即可获取对应的value。
比如,使用 currency_dict['CNY']
将返回 Chinese
。
使用List实现上述功能,需要以下三个步骤:
代码如下:
key_list=list(currency_dict.keys())
val_list=list(currency_dict.values())
val = 'Chinese'
ind=val_list.index(val)
print(key_list[ind])
Output: 'CNY'
当然,上述代码也可以精简为以下一行代码:
list(currency_dict.keys())[list(currency_dict.values()).index(val)]
当然,上述代码从val_list中获取value下标index的操作可以更换为循环方式,此时步骤如下:
代码如下:
key_list=list(currency_dict.keys())
val_list=list(currency_dict.values())
def return_key(val):
for i in range(len(currency_dict)):
if val_list[i]==val:
return key_list[i]
return("Key Not Found")
print(return_key("Dollar"))
Output: 'USD'
字典类型中,函数items()将字典中的元素组织成 key-value对。我们可以按以下步骤实现同样的功能:
代码如下:
def return_key(val):
for key, value in currency_dict.items():
if value==val:
return key
return('Key Not Found')
print(return_key('Euro'))
Output: 'EUR'
将字典转化为DataFrame然后获取key,目前来看是最简单的方法之一。但是这创建了新的数据,并不是最有效的。
字典类型转好为相应的DataFrame类型代码如下:
df=pd.DataFrame({'abbr':list(currency_dict.keys()),
'curr':list(currency_dict.values())})
上述代码将所有的key都存在DataFrame中的abbr列,将所有的value都存在DataFrame中的curr列。
经过上述转换,接下来查找 key值变得特别容易,只需执行以下代码:
val = 'Pound'
print(df.abbr[df.curr==val])
Output: 2 GBP
是不是简单了很多。。。
仔细观察,上述代码也同时返回了对应的index值,并且返回的值并不是string类型而是pandas中的序列化类型,我们可以使用以下语句将其转化为string类型。
df.abbr[df.curr==val].unique()[0]
df.abbr[df.curr==val].mode()[0]
df.abbr[df.curr==val].sum()
Output : 'GBP'
本文介绍了在Python中如何根据value从字典中获取key的几种方法,对每种方法都进行了详解,并给出了相应的代码实现。
您学废了吗?
关注公众号《AI算法之道》,获取更多AI算法资讯。
关注公众号,后台回复dict,即可获取源代码。