检查字典中是否存在value并获取键?

时间:2019-08-31 10:22:45

标签: python dictionary

我有词典字典:

Type: Google\AdsApi\AdWords\v201809\cm\ApiException
Message: [EntityNotFound.INVALID_ID @ operations[0].operand.ad.id; trigger:'']

字典中还有很多其他字典。

我要检查示例:

x = {'NIFTY': {11382018: 'NIFTY19SEPFUT', 13177346: 'NIFTY19OCTFUT', 12335874: 'NIFTY19NOVFUT'}}

在字典中存在,如果是,则获得母版y = 11382018 (在这种情况下为key)和上述NIFTY的值,即key

我可以按照以下假定的方式进行操作:

'NIFTY19SEPFUT'

只是想知道是否有更好的方法。

我一直在考虑不必遍历整个字典主for key in x.keys(): di = x[key] if y in di.keys(): inst = key cont = di[y]

3 个答案:

答案 0 :(得分:2)

检索两个感兴趣的值的更紧凑的方法是使用嵌套字典理解:

[(k, sv) for k,v in x.items() for sk,sv in v.items() if sk == y]
# [('NIFTY', 'NIFTY19SEPFUT')]

答案 1 :(得分:2)

更紧凑的版本(通用):

[(k, v[y]) for k, v in d.items() if y in v]

或者:

*next(((k, v[y]) for k, v in d.items() if y in v), 'not found')

如果可以保证只能在一个嵌套词典中找到该键。 (请注意,我在这里使用d作为字典,只是因为感觉更有意义)

代码

d = {'NIFTY': {11382018: 'NIFTY19SEPFUT', 13177346: 'NIFTY19OCTFUT', 12335874: 'NIFTY19NOVFUT'}}

y = 11382018
print([(k, v[y]) for k, v in d.items() if y in v])

# or:
# print(*next(((k, v[y]) for k, v in d.items() if y in v), 'not found'))

答案 2 :(得分:1)

直接(仅嵌套2级):

x = {'NIFTY': {11382018: 'NIFTY19SEPFUT', 13177346: 'NIFTY19OCTFUT', 12335874: 'NIFTY19NOVFUT'}}
search_key = 11382018
parent_key, value = None, None

for k, inner_d in x.items():
    if search_key in inner_d:
        parent_key, value = k, inner_d[search_key]
        break

print(parent_key, value)   # NIFTY NIFTY19SEPFUT