从列表中提取数据并创建字典

2024-04-16 21:30:32 发布

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

你好,我是Python的新手。我有一份清单

[['year', 'month', 'date_of_month', 'day_of_week', 'births'], 
['1994', '1', '1', '6', '8096'], 
['1994', '1', '2', '7', '7772'], 
['1994', '1', '3', '1', '10142'], ......]

我想编一本像这样的词典

days_counts = {
    0: 10000,
    1: 10000,
    2: 10000,
    ...
}

关键是一周中的第天值,从1到7 价值是那天出生的总人数。你知道吗


Tags: ofdatedaysyear关键词典价值week
3条回答

使用defaultdict的一种方法:

from collections import defaultdict
bdays = defaultdict(int)
for entry in mylist[1:]:
    bdays[int(entry[3])] += int(entry[4])

其中mylist是您拥有的列表。另一种方法是,使用较少的import过度杀戮,并使用您实际上知道键是什么的事实,是一个很短的整数范围,因此您根本不需要字典:

bdays = [0 for _ in range(7)]
for entry in mylist:
    bdays[int(entry[3])] += int(entry[4])

或者以一种更简洁,也许更不可读的方式:

list((sum(int(x[4]) for x in mylist[1:] if int(x[3]) == i) for i in range(1,8)))

或者坚持dict

dict(((i,sum(int(x[4]) for x in mylist[1:] if int(x[3]) == i)) for i in range(1,8)))

所有这些都确保了0个工作日也与0一起列出(可能是一个缺点?)。你知道吗

第一种解决方案的缺点是(至少从一个角度来看)任何键都是有效的,并且默认返回0。你知道吗

最后两个比较慢,因为它们迭代mylist7次。你知道吗

您也可以这样做:

l = [['year', 'month', 'date_of_month', 'day_of_week', 'births'], 
['1994', '1', '1', '6', '8096'], 
['1994', '1', '2', '7', '7772'], 
['1994', '1', '3', '1', '10142']]

births = []
for i in range(1,8):
    births.append([i, sum(int(elem[4]) for elem in l if elem[3] == str(i))])

births = dict(births)

print(births)

输出:

{1: 10142, 2: 0, 3: 0, 4: 0, 5: 0, 6: 8096, 7: 7772}

或上述内容的简化版本:

births = dict([[i, sum(int(elem[4]) for elem in l if elem[3] == str(i))] for i in range(1,8)])

也可以使用map函数:

births = dict(map(lambda i: [i, sum(int(elem[4]) for elem in l if elem[3] == str(i))], range(1,8)))

像这样:!?你知道吗

lst=[['year', 'month', 'date_of_month', 'day_of_week', 'births'], 
['1994', '1', '1', '6', '8096'], 
['1994', '1', '2', '7', '7772'], 
['1994', '1', '3', '1', '10142'],
['1994', '1', '3', '1', '10']
]

d={}
for e in lst:
  if e[3].isdigit():
    if e[3] in d:
      d.update({e[3]:d[e[3]]+int(e[4])})
    else:
      d.update({e[3]:int(e[4])})

for e in d:
  print e, d[e]

相关问题 更多 >