繁体   English   中英

如何从每个列表的2个元素中制作字典?

[英]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.

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