我有一个列表列表,我想在字典中制作。基本上它是基于日期(年/月/日/周/出生)的出生清单。我想计算每天的总分娩数,以便总计一周中每天的出生人数。
列表示例:
[2000,12,3,2,12000],[2000,12,4,3,34000]...
days_counts = {1: 23000, 2: 43000, ..., 7: 11943}
到目前为止,这是代码:
f = open('births.csv', 'r')
text = f.read()
text = text.split("\n")
header = text[0]
data = text[1:]
for d in data:
split_data = d.split(",")
print(split_data)
所以基本上我想迭代每一天,将重复日的出生时间添加到相同的密钥中(显而易见)。
编辑:我必须使用if语句来查找星期几作为dict中的键。如果找到,则将相应的分娩分配为值。如果它不在dict中,那么添加键和值。我无法导入任何内容或使用lambda函数。
答案 0 :(得分:4)
使用collections.Counter()
object跟踪每周的每日计数。您还希望使用csv
module来处理文件解析:
import csv
from collections import Counter
per_dow = Counter()
with open('births.csv', 'r') as f:
reader = csv.reader(f)
header = next(reader)
for row in reader:
dow, births = map(int, row[-2:])
per_dow[dow] += births
我使用with
语句来管理文件对象;当with
块结束时,Python会自动为您关闭文件。
现在您有一个Counter
对象(这是一个具有一些额外权力的字典),您现在可以找到出生最多的一周中的某一天;以下循环按照从大多数到最小的顺序打印出星期几:
for day, births in per_dow.most_common():
print(day, births)
答案 1 :(得分:1)
不使用外部库或if语句,可以使用异常处理
birth_dict = {}
birth_list = [[2000,12,3,2,12000],[2000,12,4,3,34000]]
for birth in birth_list:
try:
birth_dict[birth[3]]+=birth[4]
except KeyError:
birth_dict[birth[3]]=birth[4]
print birth_dict
答案 2 :(得分:0)
好的,在使用代码并使用我需要它们进行测试的print语句之后,我终于在不使用任何外部库的情况下完成了它。特别感谢Tobey和其他人。
以下是测试代码:
f = open('births.csv', 'r')
text = f.read()
text = text.split("\n")
header = text[0]
data = text[1:-1]
days_counts = {}
for d in data:
r = d.split(",")
print(r) #<--- used to test
k = r[3]
print(k)#<--- used to test
v = int(r[4])
print(v)#<--- used to test
if k in days_counts:
days_counts[k] += v
print("If : " , days_counts)#<--- used to test
else:
days_counts[k] = v
print("Else : ", days_counts)#<--- used to test
print(days_counts)
没有测试的代码:
f = open('births.csv', 'r')
text = f.read()
text = text.split("\n")
header = text[0]
data = text[1:-1]
days_counts = {}
for d in data:
r = d.split(",")
k = r[3]
v = int(r[4])
if k in days_counts:
days_counts[k] += v
else:
days_counts[k] = v
print(days_counts)