python上的嵌套字典?

2024-05-16 15:37:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含姓名、年龄和性别的文本文件

John, 55, Male
Toney, 23, Male
Karin, 42, Female
Cathie, 29, Female
Rosalba, 12, Female
Nina, 50, Female
Burton, 16, Male
Joey, 90, Male

现在我想做一个def read_person_data(persons):它可以作为嵌套字典返回信息。例如,键“John”有 字典{'Age':55,'Gender':'Male'}作为值。钥匙放在大堂里 字典应该是没有逗号的名字,所以我必须做strip还是

我已尝试使用以下代码:

with open('persons.txt','r') as infile:
    dic=[]
    for line in infile:
        s=line.split()
        dic.append(s[0])
    dictofnames={i : s[1] for i in dic}       
    
print(dictofnames)

首先列出一个清单,然后把它编入字典,但我对每个名字都有错误的年龄,不知道如何在名字和年龄后面加上性别:'男性'??但它必须是一本字典,而不是一个在特定名称的键上有格式{'Age':55,'Gender':'Male'}的列表。此外,当我执行def函数时,它不会附加到字典中,我如何修复它


Tags: forage字典defline名字johngender
3条回答

我已将您的代码修改为以下内容

    import re
    with open('persons.txt','r') as infile:
        dic={}
        for line in infile:
            s=re.split(', |\n',line)
            dic[s[0]] = {}
            dic[s[0]]['Age'] = s[1]
            dic[s[0]]['Gender'] = s[2]       
    print(dic)

输出: 约翰:{年龄:'55',性别:'Male',托尼:{年龄:'23',性别:'Male',卡琳:{年龄:'42',性别:'Male',凯蒂:{年龄:'29',性别:'Male',罗萨尔巴:{年龄:'12',性别:'Male',尼娜:{年龄:'50',性别:'Male',伯顿:{年龄:'16',性别:'Male',乔伊:'Male',年龄:'Male}90'

这可能有助于实现您想要的目标:

with open('persons.txt','r') as infile:
    data=dict()

    for line in infile:
        s=line.split(",")
        data[s[0]]={'Age':s[1],'Gender':s[2].strip()}       

print(data)

其结果是:

{'John': {'Age': ' 55', 'Gender': 'Male'},
'Toney': {'Age': ' 23', 'Gender': 'Male'},
'Karin': {'Age': ' 42', 'Gender': 'Female'},
'Cathie': {'Age': ' 29', 'Gender': 'Female'},
'Rosalba': {'Age': ' 12', 'Gender': 'Female'},
'Nina': {'Age': ' 50', 'Gender': 'Female'},
'Burton': {'Age': ' 16', 'Gender': 'Male'},
'Joey': {'Age': ' 90', 'Gender': 'Male'}}

您希望利用pandas,并使用Dataframe到字典的转换,如下所示:

import pandas as pd
def read_person_data(filename):
    df = pd.read_csv(filename,sep=',',header=None,names=['Name','Age','Gender'])
    df.set_index('Name').T.to_dict()
    return df

read_person_data('persons.txt')

输出:

{'Burton': {'Age': 16, 'Gender': ' Male'},
 'Cathie': {'Age': 29, 'Gender': ' Female'},
 'Joey': {'Age': 90, 'Gender': ' Male'},
 'John': {'Age': 55, 'Gender': ' Male'},
 'Karin': {'Age': 42, 'Gender': ' Female'},
 'Nina': {'Age': 50, 'Gender': ' Female'},
 'Rosalba': {'Age': 12, 'Gender': ' Female'},
 'Toney': {'Age': 23, 'Gender': ' Male'}}

如@Arvind Kumar所示,您还可以执行以下操作:

def read_person_data(filename):
    with open(filename,'r') as lines:
        dictofnames=dict()
        for line in lines:
            l=line.split(",")
            dictofnames[l[0]]={'Age':l[1],'Gender':l[2].strip()}       
    return dictofnames

相关问题 更多 >