我有一个列表列表和一个将名称映射到年龄的字典:
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 = {}
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)
但是我只是得到了一系列空字典。
另外,如何从新词典中提取信息进行分析?只是使用for key, value in d2.items()
还是我需要不同的语法和词典集?
我是Python的新手,所以我不了解大多数软件包,而且我倾向于使事情变得过于复杂。
答案 0 :(得分:0)
尝试:
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'}}