如何过滤多个字典列表以找到具有特定键的列表?



我是Python的新手,我被这个任务困住了。

我有一个包含多个字典列表的文件,但只有一个列表的所有键都拼写正确。在进入第二个任务之前,我需要找到它并打印正确的列表,在那里我将使用正确的列表。

列表示例:

list_1 = [{'first_key': 'random value', 'second_key': 'random value', 'third_key': 'random value'}]
list_2 = [{'first_key': 'random value', 'sscond_key': 'random value', 'third_key': 'random value'}]
list_3 = [{'first_keet': 'random value', 'second_key': 'random value', 'third_key': 'random value'}]`

我创建了一个类,其中有一个方法用于遍历字典列表,看起来像这样:

from my_file import list_1, list_2, list_3
class MyClass:
def __init__(self, my_file, something):
self.my_file = my_file
self.something = something

def is_key_present(self):
for x in self.my_file:
if self.something in x is True:
continue
else:
return False 
return

现在,我需要创建第二个方法来查找哪个列表只有正确拼写的键,然后打印结果。

我相当确信我的第一个方法是正确的,但第二个方法我不知道如何设置。

我试过这样做:

def check_for_keys(self): 
check_first_key = self.is_key_present(self.something == 'first_key')
check_second_key = self.is_key_present(self.something == 'second_key')
check_third_key = self.is_key_present(self.something == 'third_key')

first_checker = MyClass(my_file = list_1)
first_checker.check_for_keys()

但是当我试图调用这个类时,我得到了一个错误,说

first_checker = MyClass(my_file = list_1)
TypeError: MyClass.__init__() missing 1 required positional argument: 'something'

我尝试在第二个方法中添加一个for循环,看起来像这样:

for check_first, check_second, check_third in zip(list_1, list_2, list_3):
if self.something in check_first or check_second or check_third is True:
print(f'list is ok')
else:
print(f'list is not ok')
print(check_email)
print(check_model)
print(check_purchase_date)

但是我得到了与前面提到的相同的错误信息。

您的代码有init()设置了三个参数,它们都没有默认值。因此,您需要始终传入文件和一些参数。

您导入的列表项应该包含合适的字典:

list_1 = [{"first_key": "random value"}, {"second_key": "random value"}, {"third_key": "random value"}]
list_2 = [{"first_key": "random value"}, {"second_key": "random value"}, {"third_key": "random value"}]
list_3 = [{"first_key": "random value"}, {"second_key": "random value"}, {"third_key": "random value"}]

认为你的类是好的,你可以添加一个打印函数,以及在你的第二个方法中使用。也建议让你的变量更容易理解,"有些东西"不是很容易理解和遵循。

class SearchList:
def __init__(self, search_list, search_value):
self.search_list = search_list
self.search_value = search_value
def is_key_present(self):
return any(self.search_value in key for key in search_list.keys())
def print_list(self):
print(self.search_list)

认为你的代码的主要内容是你想如何处理列表文件。现在,您正在导入每个单独的列表对象。如果您打算继续这样做,我将创建另一个列表来包含所有导入的列表,这将使管理/循环它们变得更容易。我建议一种更好的方法,将列表导入到一个可以轻松循环的对象/列表中,而不是像你那样手动编写每个列表。

from my_file import list_1, list_2, list_3
all_lists=[]
all_lists.append(list_1)
all_lists.append(list_2)
all_lists.append(list_3)

对于第二个方法,它应该是简单的遍历列表,使用Class来验证键是否存在,然后打印列表。总是尽量保持你的代码简短,简单和设计为可重用性。

def print_valid_list(search_key):
for single_list in all_lists:
search = SearchList(single_list, search_key)
if search.is_key_present:
search.print_list

你应该发布一个你的文件的示例。

但是我想要一些更简单的东西,对于文件的每一行,尝试json解码它,如果它工作的对象列表是有效的。

import json
with open('file.txt') as f:
for line in f:
try:
json.decode(line)
print('valid object', line)
except json.decoder.JSONDecodeError as e:
print('invalid object')
continue

相关内容

  • 没有找到相关文章

最新更新