gpt4 book ai didi

python - 如果嵌套字典中存在值,则查找键

转载 作者:行者123 更新时间:2023-12-01 09:22:42 25 4
gpt4 key购买 nike

我正在使用 Python 3.6,我需要循环遍历嵌套字典来查找指定值是否存在,如果存在,则存储与该值对应的所有键。我还需要扩展这些条件,以便能够存储指定子字典键存在指定值的键。

字典的构建如下:

dict = {A: {B: [a, b, c], C: [d, c, e]}, D: {B: [f, g, h], E: [i, j, c]}...}

每个主键(A、D等)都是唯一的,但子词典中的键在不同的子词典中重复。

我想获取存在“c”等值的所有主键,因此输出为:

foundKeys = [A, D]

我还想添加子词典键的条件,例如获取“B”子字典键存在“c”的所有主键。这里的输出将是:

foundKeys = [A]

对于第一个条件,我想出了下面的代码:

myList = list(dict.keys())

foundKeys = []

for i in range(0,len(myList)):
tmpList = list(dict.get(myList[i],{}).values())
for j in range(0, len(tmpList)):
for k in range(0, len(tmpList[j])):
if "c" in tmpList[j][k]:
if myList[i] not in foundKeys:
foundKeys.append(myList[i])

这使我能够获得具有相应值“c”([A,D])的所有键的列表,但我有一个很大的数据集,并且我意识到可能有更好的方法来处理这个问题。

我可以更改此代码以添加子词典键条件并获取输出 [A],但运行它需要更多时间。

我是 Python 新手,仍在学习如何优化。您能否建议我在处理大型数据集时如何处理这个问题以更好地处理它?<​​/p>

最佳答案

您正在循环字典结构中的所有元素。一旦发现这种情况,就应该立即中断循环。这是使用列表理解的单行代码:

d = {'A': {'B': ['a', 'b', 'c'], 'C': ['d', 'c', 'e']}, 'D': {'B': ['f', 'g', 'h'], 'E': ['i', 'j', 'c']}}

found_keys = [k for k, v in d.items() if any("c" in l for l in v.values())]

如果您想按子词典键进行过滤,它甚至更短:

found_keys = [k for k, v in d.items() if "c" in v['B']]

关于python - 如果嵌套字典中存在值,则查找键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com