在嵌套字典 python 中搜索值

编程入门 行业动态 更新时间:2024-10-23 17:29:11
本文介绍了在嵌套字典 python 中搜索值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

搜索一个值并获取父字典名称(键):

Search for a value and get the parent dictionary names (keys):

Dictionary = {dict1:{ 'part1': { '.wbxml': 'application/vnd.wap.wbxml', '.rl': 'application/resource-lists+xml', }, 'part2': {'.wsdl': 'application/wsdl+xml', '.rs': 'application/rls-services+xml', '.xop': 'application/xop+xml', '.svg': 'image/svg+xml', }, 'part3':{...}, ... dict2:{ 'part1': { '.dotx': 'application/vnd.openxmlformats-..' '.zaz': 'application/vnd.zzazz.deck+xml', '.xer': 'application/patch-ops-error+xml',} }, 'part2':{...}, 'part3':{...},... },...

在上面的字典中,我需要搜索如下值:"image/svg+xml".其中,字典中没有重复任何值.如何搜索"image/svg+xml"?以便它应该返回字典中的父键 { dict1:"part2" }.

In above dictionary I need to search values like: "image/svg+xml". Where, none of the values are repeated in the dictionary. How to search the "image/svg+xml"? so that it should return the parent keys in a dictionary { dict1:"part2" }.

请注意:解决方案应该未经修改适用于 Python 2.7 和 Python 3.3.

Please note: Solutions should work unmodified for both Python 2.7 and Python 3.3.

推荐答案

这是对嵌套 dict 的迭代遍历,另外还跟踪导致特定点的所有键.因此,只要您在 dicts 中找到正确的值,您就已经拥有获取该值所需的键.

This is an iterative traversal of your nested dicts that additionally keeps track of all the keys leading up to a particular point. Therefore as soon as you find the correct value inside your dicts, you also already have the keys needed to get to that value.

如果您将下面的代码放在 .py 文件中,它将按原样运行.find_mime_type(...) 函数返回键序列,这些键将使您从原始字典中找到您想要的值.demo() 函数展示了如何使用它.

The code below will run as-is if you put it in a .py file. The find_mime_type(...) function returns the sequence of keys that will get you from the original dictionary to the value you want. The demo() function shows how to use it.

d = {'dict1': {'part1': {'.wbxml': 'application/vnd.wap.wbxml', '.rl': 'application/resource-lists+xml'}, 'part2': {'.wsdl': 'application/wsdl+xml', '.rs': 'application/rls-services+xml', '.xop': 'application/xop+xml', '.svg': 'image/svg+xml'}}, 'dict2': {'part1': {'.dotx': 'application/vnd.openxmlformats-..', '.zaz': 'application/vnd.zzazz.deck+xml', '.xer': 'application/patch-ops-error+xml'}}} def demo(): mime_type = 'image/svg+xml' try: key_chain = find_mime_type(d, mime_type) except KeyError: print ('Could not find this mime type: {0}'.format(mime_type)) exit() print ('Found {0} mime type here: {1}'.format(mime_type, key_chain)) nested = d for key in key_chain: nested = nested[key] print ('Confirmation lookup: {0}'.format(nested)) def find_mime_type(d, mime_type): reverse_linked_q = list() reverse_linked_q.append((list(), d)) while reverse_linked_q: this_key_chain, this_v = reverse_linked_q.pop() # finish search if found the mime type if this_v == mime_type: return this_key_chain # not found. keep searching # queue dicts for checking / ignore anything that's not a dict try: items = this_v.items() except AttributeError: continue # this was not a nested dict. ignore it for k, v in items: reverse_linked_q.append((this_key_chain + [k], v)) # if we haven't returned by this point, we've exhausted all the contents raise KeyError if __name__ == '__main__': demo()

输出:

在这里找到图像/svg+xml mime 类型:['dict1', 'part2', '.svg']

Found image/svg+xml mime type here: ['dict1', 'part2', '.svg']

确认查找:image/svg+xml

Confirmation lookup: image/svg+xml

更多推荐

在嵌套字典 python 中搜索值

本文发布于:2023-11-12 03:45:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1580421.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   字典   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!