如何从每个列表中的2个元素中创建字典?

时间:2016-12-14 22:03:03

标签: python list dictionary

我有一个列表列表,我想在字典中制作。基本上它是基于日期(年/月/日/周/出生)的出生清单。我想计算每天的总分娩数,以便总计一周中每天的出生人数。

列表示例:

[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函数。

3 个答案:

答案 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)