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