简体   繁体   English

带有年份键的列表列表中的词典词典

[英]Dictionary of dictionaries from list of lists with year keys

I have a list of list like this:我有一个这样的列表列表:

[['2014', 'MALE', 'WHITE NON HISPANIC', 'Zachary', '90', '39'], 
['2014', 'MALE', 'WHITE NON HISPANIC', 'Zev', '49', '65']]

I want to converted in a dictionary like this:我想在这样的字典中转换:

{{2012: {1: 'David',
  2: 'Joseph',
  3: 'Michael',
  4: 'Moshe'},
2013: {1: 'David',
  2: 'Joseph',
  3: 'Michael',
  4: 'Moshe'},

I'm trying to do a list comprehension like this:我正在尝试像这样进行列表理解:

boy_names = {row[0]:{i:row[3]} for i,row in enumerate(records) if row[1]=='MALE'}

But the result I'm getting is like:但我得到的结果是这样的:

{'2011': {7851: 'Zev'}, '2012': {9855: 'Zev'}, 
'2013': {11886: 'Zev'}, '2014': {13961: 'Zev'}}

If I'm right, I think I'm taking the last value and its row number from enumerate by the year key, but no idea how to solve it.如果我是对的,我想我是通过年份键从枚举中获取最后一个值及其行号,但不知道如何解决它。

I believe you need我相信你需要

data = [['2014', 'MALE', 'WHITE NON HISPANIC', 'Zachary', '90', '39'], 
['2014', 'MALE', 'WHITE NON HISPANIC', 'Zev', '49', '65']]

result = {}
for i in data:           #Iterate sub-list
    result.setdefault(i[0], []).append(i[3])   #Form DICT
    
result = {k: dict(enumerate(v, 1)) for k, v in result.items()}   #Use enumerate to get index number
print(result)
# {'2014': {1: 'Zachary', 2: 'Zev'}}

You can use the length of the sub-dict under the year key to calculate the next incremental numeric key for the sub-dict under the current year.可以根据年份key下sub-dict的长度来计算当前年份下sub-dict的下一个递增数字键。 Use the dict.setdefault method to default the value of a new key to an empty dict:使用dict.setdefault方法将新键的值默认为空字典:

boy_names = {}
for year, _, _, name, _, _ in records:
    record = boy_names.setdefault(int(year), {})
    record[len(record) + 1] = name

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM