Python 我需要帮助从字典列表中提取特定数据

Python 我需要帮助从字典列表中提取特定数据,python,list,dictionary,text-files,Python,List,Dictionary,Text Files,我有一个文本文件,列出了一组员工的名字和姓氏、身份证号码、性别和工作年限。第一行包含员工人数。它叫employees.txt。这是: 七, 约翰 母鹿 三十三 272838 M 玛丽 约翰逊 三十八 3849383 F 奥佩 狗 六, 839293 M 小姐 狗 四, 238392 F 约翰 布拉 二十八 834282 M 阿米莉亚 斯皮恩 二, 5789812 F 谢恩 卡森斯坦 二, 567891 M 我想把这些信息整理成一个字典列表,然后找到所有女性员工,打印出她们的名字和姓氏。我可以让

我有一个文本文件,列出了一组员工的名字和姓氏、身份证号码、性别和工作年限。第一行包含员工人数。它叫employees.txt。这是:

七,

约翰

母鹿

三十三

272838

M

玛丽

约翰逊

三十八

3849383

F

奥佩

六,

839293

M

小姐

四,

238392

F

约翰

布拉

二十八

834282

M

阿米莉亚

斯皮恩

二,

5789812

F

谢恩

卡森斯坦

二,

567891

M


我想把这些信息整理成一个字典列表,然后找到所有女性员工,打印出她们的名字和姓氏。我可以让字典列表正常工作,但当我试图找到并打印出女性员工的姓名时,我遇到了一个错误。这是我的密码:

def employee_write(file):
    employee_dict = {}
    employee_dict["First"] = file.readline().strip()
    employee_dict["Last"] = file.readline().strip()
    employee_dict["Experience"] = file.readline().strip()
    employee_dict["ID"] = file.readline().strip()
    employee_dict["Gender"] = file.readline().strip()
    return employee_dict

def female_print(x2):
    for term in x2:
        for word in employee_dict:
            if employee_dict["Gender"] == "F":
                print(employee_dict["First"])
                print(employee_dict["Last"])

def main():
    file = open("employees.txt", "r")
    n = int(file.readline())
    x1 = employee_write(file)
    employee_list = []
    for i in range(n):
        employee_list.append(x1)
        x2 = employee_list
    print(x2)
    female_print(x2)

main()

我的错误是什么?female_print()函数不起作用,因为它表示未定义名称“employee_dict”。有什么问题吗?

我在理解变量的命名和用法时遇到了一些困难,因此我将其简化了一点:

def employee_write(file):
    employee_dict = {}
    employee_dict["First"] = file.readline().strip()
    employee_dict["Last"] = file.readline().strip()
    employee_dict["Experience"] = file.readline().strip()
    employee_dict["ID"] = file.readline().strip()
    employee_dict["Gender"] = file.readline().strip()
    return employee_dict

def female_print(employee_list):
    for employee in employee_list:
        if employee["Gender"] == "F":
            print(employee["First"])
            print(employee["Last"])

def main():
    file = open("employees.txt", "r")
    n = int(file.readline())
    employee_list = []
    for i in range(n):
        employee_list.append(employee_write(file))
    print(employee_list)
    female_print(employee_list)

main()
产生

[{'Gender': 'M', 'Last': 'Doe', 'ID': '272838', 'Experience': '33', 'First': 'John'}, {'Gender': 'F', 'Last': 'Johnson', 'ID': '3849383', 'Experience': '38', 'First': 'Mary'}, {'Gender': 'M', 'Last': 'Dog', 'ID': '839293', 'Experience': '6', 'First': 'Opie'}, {'Gender': 'F', 'Last': 'Dog', 'ID': '238392', 'Experience': '4', 'First': 'Missy'}, {'Gender': 'M', 'Last': 'Bla', 'ID': '834282', 'Experience': '28', 'First': 'John'}, {'Gender': 'F', 'Last': 'Spien', 'ID': '5789812', 'Experience': '2', 'First': 'Amelia'}, {'Gender': 'M', 'Last': 'CasenStien', 'ID': '567891', 'Experience': '2', 'First': 'Shane'}]
Mary
Johnson
Missy
Dog
Amelia
Spin
这就是你想要的吗?

这里有两个(主要)问题。首先,您实际上并没有读取整个文件。您正在读取第一条记录(作为x1),然后将该记录附加到列表中N次。从照片上可以看出,你只得到一张唱片

另外,print_female函数正在引用一个不存在的变量“employee_dict”-您可能需要在某个地方定义它。也许你想用“术语”?这会抛出堆栈跟踪


如果您解决了这两个问题,那么代码的基本前提是可靠的。

main
中,函数
employee\u write
(可能应该称为
employee\u read
)只调用一次

请尝试以下方法:

In [1]: with open('employees.txt', 'r') as ef:
    txt = ef.read()
   ...:     

In [2]: lines = txt.split()

In [3]: records = [lines[i:i+5] for i in xrange(1, len(lines), 5)]

In [4]: records
Out[4]: [['John', 'Doe', '33', '272838', 'M'], ['Mary', 'Johnson', '38', '3849383', 'F'], ['Opie', 'Dog', '6', '839293', 'M'], ['Missy', 'Dog', '4', '238392', 'F'], ['John', 'Bla', '28', '834282', 'M'], ['Amelia', 'Spien', '2', '5789812', 'F'], ['Shane', 'CasenStien', '2', '567891', 'M']]

In []: for r in records:
    print r
   ....:     
['John', 'Doe', '33', '272838', 'M']
['Mary', 'Johnson', '38', '3849383', 'F']
['Opie', 'Dog', '6', '839293', 'M']
['Missy', 'Dog', '4', '238392', 'F']
['John', 'Bla', '28', '834282', 'M']
['Amelia', 'Spien', '2', '5789812', 'F']
['Shane', 'CasenStien', '2', '567891', 'M']

注意:此代码假定输入文件格式正确

请将您看到的错误添加到问题中。这一个如何?它说“函数女性打印(x2)”中的“employee_dict”没有定义。那是因为你没有1)传入它,或者2)将它声明为一个global。我该如何修复它,Moshie?谢谢!我已经解决了这个问题。请注意,数据文件的开头有一行标题,其中包含records.Oops的数量。由于记录的数量,修复了一个错误。谢谢DSM!