[英]How do you make a dictionary out of 2 elements in each list?
我有一个清单,想把它做成字典。 基本上,这是一个基于日期(年/月/日/周/日)的出生列表。 我想统计每天的总出生数,以查看一周中每天的总出生数。
清单示例:
[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中的键。 如果找到,则将相应的出生分配为值。 如果它不在字典中,则添加键和值。 我无法导入任何东西或使用lambda函数。
使用collections.Counter()
对象跟踪一周中的每一天的计数。 您还想使用csv
模块来处理文件解析:
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)
无需使用外部库或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
好的,在试用了代码并在需要测试的地方使用了打印语句之后,我终于在不使用任何外部库的情况下做到了。 非常感谢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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.