美文网首页
python3通过字典的value(值)获取对应的key(键)

python3通过字典的value(值)获取对应的key(键)

作者: AmanWang | 来源:发表于2020-11-06 18:16 被阅读0次

这个问题是在写接口自动化程序的过程中,有个场景希望能通过字典的value获取对应的key,在网上找到了解决方案,这里自己加一些注解放出来,希望能让大家明白是如何实现的。

网友的原代码形式如下

def getDictKey_1(myDict, value):
    return [k for k, v in myDict.items() if v == value]

代码特别简洁,返回一个列表,但是可能有些同学不太明白如何实现的,下面对该代码进行一个变装:

def getDictKey_2(myDict, value):
    keyList = []
    for k, v in myDict.items():
        if v == value:
            keyList.append(k)
    return keyList

上面这两个代码的效果是一样的,测试结果如下

d = {'中国':'北京', '首都':'北京', '河南':'郑州', '余额': 0.01}
print("getDictKey_1(d, '北京')=", getDictKey_1(d, '北京'))
print("getDictKey_1(d, '郑州')=", getDictKey_1(d, '郑州'))
print("getDictKey_1(d, 0.01)=", getDictKey_1(d, 0.01))
print("getDictKey_1(d, '0.01')=", getDictKey_1(d, '0.01'))

print("getDictKey_2(d, '北京')=", getDictKey_2(d, '北京'))
print("getDictKey_2(d, '郑州')=", getDictKey_2(d, '郑州'))
print("getDictKey_2(d, 0.01)=", getDictKey_2(d, 0.01))
print("getDictKey_2(d, '0.01')=", getDictKey_2(d, '0.01'))

执行结果:
getDictKey_1(d, '北京')= ['中国', '首都']
getDictKey_1(d, '郑州')= ['河南']
getDictKey_1(d, 0.01)= ['余额']
getDictKey_1(d, '0.01')= []

getDictKey_2(d, '北京')= ['中国', '首都']
getDictKey_2(d, '郑州')= ['河南']
getDictKey_2(d, 0.01)= ['余额']
getDictKey_2(d, '0.01')= []

那么,为什么这样就可以获取到key呢?重点就在于字典的items()这个方法的返回值上,见下面的代码

d = {'中国': '北京', '首都': '北京', '河南': '郑州', '余额': 0.01}
print(d.items())

结果
dict_items([('中国', '北京'), ('首都', '北京'), ('河南', '郑州'), ('余额', 0.01)])

可以看到,items()方法会遍历字典的每个key-value键值对并将每个键值对以元组的形式保存,其中key为第一个元素,value为第二个元素,即(key, value),并且会将所有的键值对元组以列表的形式返回。因此可以对items()返回值的列表进行遍历后处理(key, value)就可以得到想要的key。需要注意的是,一个value可能会对应多个key。

容错处理
上面两个函数在正常传参的情况下可以正确返回想要的结果,但是如果第一个参数myDict不是字典形式,就会抛出异常,如下:

d = "{'中国':'北京', '首都':'北京', '河南':'郑州', '余额': 0.01}"
print("getDictKey_1(d, '北京')=", getDictKey_1(d, '北京'))

结果:
Traceback (most recent call last):
  File "E:/feedback_record/test.py", line 131, in <module>
    print("getDictKey_1(d, '北京')=", getDictKey_1(d, '北京'))
  File "E:/feedback_record/test.py", line 99, in getDictKey_1
    return [k for k, v in myDict.items() if v == value]
AttributeError: 'str' object has no attribute 'items'

很好处理,做个判断就可以了,如下:

def getDictKey_3(myDict, value):
    if not isinstance(myDict, dict):
        return False
    keyList = []
    for k, v in myDict.items():
        if v == value:
            keyList.append(k)
    return keyList

d = "{'中国':'北京', '首都':'北京', '河南':'郑州', '余额': 0.01}"
print("getDictKey_3(d, '北京')=", getDictKey_3(d, '北京'))

结果:
getDictKey_3(d, '北京')= False

注意:
大家正式使用的时候,要做个判断,正确返回了key时再继续往下执行。

相关文章

  • NSDictionary底层实现原理探索

    我们知道字典取值通过key-value的方式,确定key值在字典中有特定key就可以找出对应的value。在...

  • Python学习笔记之六-字典

    字典由 键(key) 及相对应的 值(value) 组成,每一个 键-值 对 称为项(item)。每个键与其值之间...

  • python3通过字典的value(值)获取对应的key(键)

    这个问题是在写接口自动化程序的过程中,有个场景希望能通过字典的value获取对应的key,在网上找到了解决方案,这...

  • python 数据类型1

    一.字典一组键(key)和值(value)的组合,通过键(key)进行查找,没有顺序, 使用大括号”{}”;1.1...

  • 【Python】字典dict

    字典特点 用{}来表示,按照key:value来表示字典中的元素,其中key是键,value是值,key-valu...

  • 字典

    字典 dictionary 新华字典 啊 a 概述:使用键-值(key-value)方式存储。'''key的...

  • 字典dictionary

    字典(dictionary) 字典可看作是键(key)与值(value)之间的一系列一一对应关系。 字典和列表相似...

  • 字典_映射类型

    dict = {key:value,key:value} 通常标志:大括号{},键和值之间有冒号: 可以有空字典 ...

  • objective-c NSDictionary

    创建## 单个创建 多个创建 快速创建和获取 字典遍历## 获取字典key和value的个数(key成为键,val...

  • dict和set

    dict:{ } 关键值:字典、键Key-值Value(键值对)、key不可变、value可变、无序 dict全称...

网友评论

      本文标题:python3通过字典的value(值)获取对应的key(键)

      本文链接:https://www.haomeiwen.com/subject/srxxbktx.html