Python字典dict中通过value找key的思路

Python学习评论阅读模式

Python字典dict中通过value找key的思路

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的几种方法,对每种方法都进行了详解,并给出了相应的代码实现。

 

 

继续阅读
weinxin
我的微信
运营不易,
感谢支持!
公式库网
  • 本文由 发表于 2023年4月2日 14:00:22
  • 转载请务必保留本文链接:https://www.gongshiku.com/html/202304/pythonzidiandictzhongtongguovaluezhaokeydesilu.html
Python学习

Python操作pymysql详细示例

Python操作pymysql详细示例 程序在运行时,数据都是在内存中的。当程序终止时,通常需要将数据保存在磁盘上。前面我们有学过将数据写入文件就是保存到磁盘的一种方式。但是当面对大批量的数据时,为...

发表评论