1.引言

在Python使用字典处理相关数据时,如果我们有了key值,是很容易获取字典对应key值的value的,这就好比用钥匙开锁一样简单。但是反之,也就是根据value去获取对应的key值并不那么直接。

在实际工作中,尤其是当key和value具有一对一的关系的时候,此时根据value来提取key就变得很重要。这是因为此时key和value都是唯一的,二者均可以作为查找的索引。

接下来,就让我们来探索一下根据value如何从字典中提取key的功能吧。

2.举个栗子

首先,我们将创建一个字典以进行样例说明。
如下所示,currency_dict 是以货币缩写为key,以货币名称为value的字典。

currency_dict={'USD':'Dollar',
               'EUR':'Euro',
              ' GBP':'Pound',
               'CNY':'Chinese'}

如果我们有key,只需在方括号内添加key即可获取对应的value。
比如,使用 currency_dict['CNY'] 将返回 Chinese

3.使用列表List

使用List实现上述功能,需要以下三个步骤:

  • 将字典的key和value分别转换为列表key_list,value_list
  • 从列表value_list中查找对应value的下标 index
  • 使用上述index,来从key_list中获取对应的key

代码如下:

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)]

4.使用循环Loop

当然,上述代码从val_list中获取value下标index的操作可以更换为循环方式,此时步骤如下:

  • 将字典的key和value分别转换为列表key_list,value_list
  • 循环遍历value_list,查找对应的value的索引
  • 返回key_list中对应索引的key值

代码如下:

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'

5.使用items()

字典类型中,函数items()将字典中的元素组织成 key-value对。我们可以按以下步骤实现同样的功能:

  • 使用items()迭代字典中所有的key-value对
  • 比较value是否为需要的value
  • 如果找到,则返回相应的key

代码如下:

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'

6.使用Pandas DataFrame

将字典转化为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'

7.总结

本文介绍了在Python中如何根据value从字典中获取key的几种方法,对每种方法都进行了详解,并给出了相应的代码实现。

您学废了吗?




在这里插入图片描述
关注公众号《AI算法之道》,获取更多AI算法资讯。

关注公众号,后台回复dict,即可获取源代码。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐