gpt4 book ai didi

python - 在列表和字典的字典中查找字符串

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

我有一个由列表和字典组成的变量字典,我试图对其进行迭代以查找特定值。
字典看起来像这样

list = { 'foo' : [1,2,3,4], 'bar' : { 'something' : 'value', 'something else' : 'value' }, 'anotherlist' : [5,6,7,8]}

其确切结构是可变的,可以是列表、字典、嵌套或两者。我无法提前知道会发生什么。

我知道我需要一台发电机,但我失败了。这是我尝试过的代码片段(不是我自己的)

def find(key, dictionary):
print dictionary
if key in dictionary:
yield key
for k, v in dictionary.iteritems():
if k == key:
yield v
elif isinstance(v, dict):
for result in find(key, v):
yield result
elif isinstance(v, list):
for d in v:
for result in find(key, d):
yield result

(我知道这是返回键,但我想我可以将其修改为值)

但我正在关注:

AttributeError: 'unicode' object has no attribute 'iteritems'

我尝试修改它

def find(key, dictionary):
print dictionary
if key in dictionary:
yield key
if isinstance(dictionary, unicode):
yield key
for k, v in dictionary.iteritems():
if k == key:
yield v
elif isinstance(v, dict):
for result in find(key, v):
yield result
elif isinstance(v, list):
for d in v:
for result in find(key, d):
yield result

但这并没有帮助。

有什么建议吗?

最佳答案

这里的问题似乎在于,传入 find()dictionary 有时可能只是一个值,但甚至不是一个 dict 或一个列表,并抛出此错误:

AttributeError: 'unicode' object has no attribute 'iteritems'

试试这个:

def find(key, dictionary):
if isinstance(dictionary, dict) or isinstance(dictionary, list):
if key in dictionary:
yield key
for k, v in dictionary.iteritems():
if k == key:
yield v
elif isinstance(v, dict):
for result in find(key, v):
yield result
elif isinstance(v, list):
for d in v:
for result in find(key, d):
yield result
else:
if key == dictionary:
yield key

我用这个例子来测试:

test_data = { 'foo' : [1,2,3,4], 'bar': { 'something': 'value', 'something else': 'value' }, 'anotherlist' : [5,6,7,8]}

test = find('something', test_data)
for t in test:
print t

我不确定您到底想在这里实现什么,但我想这将是一个起点。

关于python - 在列表和字典的字典中查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50092577/

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