检查字典中是否存在值并获取密钥?

2024-10-01 00:34:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典:

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]

只是想知道有没有更好的办法。你知道吗

我的思路是不必在整个字典主目录上循环keys


Tags: keyin示例forif字典keysnifty
3条回答

检索两个感兴趣的值的更简洁的方法是使用嵌套字典:

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

直截了当地(仅针对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

更紧凑的版本(通用):

[(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'))

相关问题 更多 >