我有词典字典:
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]
答案 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