从python中的字典和列表创建字典集

从python中的字典和列表创建字典集,python,dictionary,Python,Dictionary,我有一个列表和一个字典,将姓名映射到年龄: listofl = [['ID', 'gender', 'ethnicity', 'name', 'address', 'children'], ['1', 'female', 'white', 'Amy', 'XXXX', '2'], ['2', 'male', 'white', 'Mark', 'XXXX', '0'], [...]] d1 = {'AMY' : 52, 'JACK' : 39, 'MARK' : 74, 'MELISSA' : 2

我有一个列表和一个字典,将姓名映射到年龄:

listofl = [['ID', 'gender', 'ethnicity', 'name', 'address', 'children'], ['1', 'female', 'white', 'Amy', 'XXXX', '2'], ['2', 'male', 'white', 'Mark', 'XXXX', '0'], [...]]
d1 = {'AMY' : 52, 'JACK' : 39, 'MARK' : 74, 'MELISSA' : 29...}
列表列表中还包括一些键以及这些人的其他信息。我想创建一组字典,如果子列表和字典中有一个名字,它就成为一个键,其中有一个包含年龄、性别和种族信息的字典。所以结果应该是这样的:

d2 = {'Amy' : {'age' : 52, 'gender' : 'female', 'ethnicity' : 'white'}, 'Mark' : {'age' : 74, 'gender' : 'male', 'ethnicity' : 'white'}, ...}
d2 = {'Amy' : ['age' : 52, 'gender' : 'female', 'ethnicity' : 'white'], 'Mark' : ['age' : 74, 'gender' : 'male', 'ethnicity' : 'white'], ...}
或者像这样:

d2 = {'Amy' : {'age' : 52, 'gender' : 'female', 'ethnicity' : 'white'}, 'Mark' : {'age' : 74, 'gender' : 'male', 'ethnicity' : 'white'}, ...}
d2 = {'Amy' : ['age' : 52, 'gender' : 'female', 'ethnicity' : 'white'], 'Mark' : ['age' : 74, 'gender' : 'male', 'ethnicity' : 'white'], ...}
我尝试的是:

d2 = {}
newk = ["age", "gender", "ethnicity"]
for key in d1.items():
    new_keys = []
    new_keys.append(key)
    for i in listofl[1:]:
        newv = []
        for k in i:
            if k[3].upper() in new_keys:
                newv.append(read.values())
                newv.append(k[1])
                newv.append(k[2])
        sub_d = dict(zip(newk, newv))
        d2 = dict(zip(key, sub_d))
print(d2)
但我只是得到了一系列空字典。 另外,如何从新词典中提取信息进行分析?只需在d2.items中使用for key、value,还是需要使用不同的语法来处理字典集? 我是Python新手,所以我不了解大多数包,而且我倾向于将事情过于复杂化

试试这个:

import datetime

listofl = [['1', 'female', 'white', 'Amy', '03/10/1967', 'XXXX', '2'], ['2', 
'male', 'white', 'Mark', '01/07/1945', 'XXXX', '0']]
d1 = {'AMY' : 52, 'JACK' : 39, 'MARK' : 74, 'MELISSA' : 29}

for item in listofl :
    item[3] = item[3].upper()

d2 = {}
newk = ["age", "gender", "ethnicity"]
keys = d1.keys()


for item in listofl :
    for key in keys :
        dic={}
        if key in item :
            dic['age']=datetime.datetime.now().year-int(item[4][-4::])
            dic['gender']=item[1]
            dic['ethnicity']=item[2]
            d2[key] = dic

print(d2)
输出:

{'AMY': {'age': 52, 'gender': 'female', 'ethnicity': 'white'}, 
'MARK': {'age': 74, 'gender': 'male', 'ethnicity': 'white'}}

也有助于查看列表的外观请显示列表的外观我将其编辑为包含lists@Mary更改为,以便在listofl[1:]中记录:;性别,种族,姓名=记录[1],记录[2],记录[3]。有没有办法从字典中检索年龄,比如dic['age']=d1.values?由于列表中没有信息,我更改了代码以解决名称问题。您可以编写dic['age']=d1[key]而不是dic['age']=datetime.datetime.now.year intitem[4][4::]因此您可以尝试以下操作:dic['age']=d1[key]而不是dic['age']=datetime.datetime.now.year intitem[4::]还有一件事,因此,如果现在我想根据“种族”和“白人”检索所有“性别”和“女性”,我是否会像在普通字典中一样使用dic.items中的键和值?