我将.txt文件中的多个词典导入到我的python文件中,然后我必须在所有词典中搜索一个键('name')但我的代码只搜索第一个词典并相应地给出结果。我想知道是否有一种简单的方法来处理这种情况。立即的帮助将不胜感激。当前代码和.txt文件中的数据如下所示:
elif option == 's':
if 'name' in open('data.txt').read():
sea = input ("Type a menu item name to search for: ")
file = open('data.txt', 'r')
data = json.load(file)
file.close()
for index, line in enumerate(data):
if sea.lower() in line['name'].lower():
print (index, line['name'])
main()
else:
print ('No such item exist')
main()
else:
print ("The list is empty")
main()
字典:
[
{
"fat": 29,
"carbohydrates": 45,
"protein": 25,
"sodium": 1040,
"cholesterol": 75,
"calories": 540,
"name": "Big Mac"
},
{
"fat": 47,
"carbohydrates": 53,
"protein": 33,
"sodium": 1410,
"cholesterol": 100,
"calories": 760,
"name": "Whopper"
},
{
"fat": 80,
"carbohydrates": 50,
"protein": 650,
"calories": 45,
"cholesterol": 50,
"sodium": 50,
"name": "Icecream'"
}
]
答案 0 :(得分:0)
问题是你已经使你的第一个循环迭代成为整个世界:它查看列表中的第一个项目,单独报告该搜索的成功或失败,然后递归调用主程序(这也是一个糟糕的程序建设。
在此订单上尝试使用逻辑:
found = False
for index, line in enumerate(data):
if sea.lower() in line['name'].lower():
print (index, line['name'])
found = True
if not Found:
print ('No such item exists')
最后,不要调用 main()将其包装在 while 循环中,以测试程序的终止条件。
答案 1 :(得分:0)
如果使用Python 3,您可以使用专为此目的而设计的ChainMap。并且可能比您使用的算法更有效。
我希望它可以作为地图的地图"实现,其中顶级地图具有每个地图的统一密钥索引,指向内存中的原始条目。可能在C中实现。重要的是对成员dict的更改会更新主dict中的索引。否则,您必须对每个字典进行迭代搜索。然后,通过排序等不能优化查找。可以使用某种手表,例如,如果dict的底层C对象旨在检查它是否是变更链映射的一部分,并通知。