微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从值为列表类型的字典上的值中获取键

如何解决如何从值为列表类型的字典上的值中获取键

我想做什么

希望从下面的值中得到key。

d = {'key1': 'a','key2': 'b','key3': 'c'}
-> 'key1' in the case that value is 'a'

d2 = {'key1': ['a','b','c'],'key2': ['d','e','f'],'key3': ['g','h','i']}

-> 'key1' in the case that value is 'a'

错误信息

但是,当字典具有列表类型的值时,我无法执行它。

如何修复我当前的代码

Traceback (most recent call last):
  File "sample.py",line 10,in <module>
    key = [k for k,v in d2.items() if v == 'a'][0]
IndexError: list index out of range

代码

d = {'key1': 'a','key3': 'c'}

#get the key from the vakue
print(d.items())
key = [k for k,v in d.items() if v == 'a'][0]
print(key)

d2 = {'key1': ['a','i']}
print(d2.items())
key = [k for k,v in d2.items() if v == 'a'][0]
print(key)

输出

$ python sample.py
[('key3','c'),('key2','b'),('key1','a')]
key1
[('key3',['g','i']),['d','f']),['a','c'])]

解决方法

在第二种情况下,您的列表理解产生空列表,因此索引 0 不存在并且您得到 IndexError。您想检查'a' in v

d2 = {'key1': ['a','b','c'],'key2': ['d','e','f'],'key3': ['g','h','i']}
key = [k for k,v in d2.items() if 'a' in v][0]
,

问题是您将 'a' 与完整列表匹配,因此列表理解生成的列表是一个空列表,因此当您尝试访问 {{1} 处的列表元素时会出现索引错误}第一个索引。

您需要在第二种情况下使用 0 关键字:

如果您确定密钥只存在一次,您也可以使用生成器表达式:

in
,

如果您只想以列表 ['a','c'] 中的第一项为例(在您的情况下,它是 d2 字典的键 key1 的值),您可以执行以下操作: print(d2['key1' # your key name][0 # the index of the value list])

输出为: >>> b

,
d = {'key1':['a','key2': ['a','d','e']}

key_list = [k for k,v in d.items() if 'a' in v] # For all the keys having 'a' in value.
>>> key_list
['key1','key2']

key = [k for k,v in d.items() if 'a' in v][0] #Get Only one key by specifying index as [0] from key_list.
>>> key
'key1'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。