Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将词典写入CSV文件_Python - Fatal编程技术网

Python 将词典写入CSV文件

Python 将词典写入CSV文件,python,Python,我有很多这样的字典,其中键是年龄,值是这个年龄的人数。我把它们分成了多个字典 age_50 = {39: 66, 40: 83, 42: 217, 43: 53, 23: 33, 21: 28} age50_80 = {59: 397, 65: 408, 61: 120, 67: 241, 68: 372, 78: 424, 76: 635 } age_80 = {80: 93, 88: 425, 83: 165, 84: 58, 91: 88} 我想将它写入一个

我有很多这样的字典,其中键是年龄,值是这个年龄的人数。我把它们分成了多个字典

    age_50 = {39: 66, 40: 83, 42: 217, 43: 53, 23: 33, 21: 28} 
    age50_80 = {59: 397, 65: 408, 61: 120, 67: 241, 68: 372, 78: 424, 76: 635 } 
    age_80 = {80: 93, 88: 425, 83: 165, 84: 58, 91: 88} 
我想将它写入一个CSV文件,每列都是一个字典,每行都是每个键的值。我希望我的输出将是下表。如果键存在,则写入值。如果不是,则仅用0填充:

Age_Under50    Between_50_80        Greater_80
66              397                   0
83              408                  93
217             120                 425
53              241                   0
33              372                 165
28              424                  58
0               635                  88

试试下面的方法

import csv, itertools

age_50 = {39: 66, 40: 83, 42: 217, 43: 53, 23: 33, 21: 28} 
age50_80 = {59: 397, 65: 408, 61: 120, 67: 241, 68: 372, 78: 424, 76: 635 } 
age_80 = {80: 93, 88: 425, 83: 165, 84: 58, 91: 88} 

cf = csv.writer(open("test.csv", "w"))

cf.writerows(
    itertools.zip_longest(
        ['Age_Under50']     + [age_50.get(k, 0)   for k in range(50)],
        ['Between_50_80']   + [age50_80.get(k, 0) for k in range(50,80)],
        ['Greater_80']      + [age_80.get(k, 0)   for k in range(80,100)],
        fillvalue=0
    )
)
窗户

import csv, itertools

age_50 = {39: 66, 40: 83, 42: 217, 43: 53, 23: 33, 21: 28} 
age50_80 = {59: 397, 65: 408, 61: 120, 67: 241, 68: 372, 78: 424, 76: 635 } 
age_80 = {80: 93, 88: 425, 83: 165, 84: 58, 91: 88} 

f = open("test.csv", "w", newline='')
cf = csv.writer(f)

cf.writerows(
    itertools.zip_longest(
        ['Age_Under50'] + [age_50[k] for k in age_50],
        ['Between_50_80']+[age50_80[k] for k in age50_80],
        ['Greater_80']+[age_80[k] for k in age_80],
        fillvalue=0
    )
)

f.close()

…如果密钥存在,请写入值。如果不只是用0填充。。。如果钥匙存在,你是什么意思?您希望存在哪些键?例如:if key in Age_Under50:Age_Under50.get(key,0)Age_50总共有6个键,因此我假设您将在第一列中得到44个0。我说得对吗?另外,80岁的范围是多少。80-?是的,44是正确的,因为它不存在。对于“age_80”>=80,它可以工作,但是我稍微更改了代码,尽管我更改的代码有一个问题。它在每次迭代中创建一个额外的行。cf.writerows(itertools.zip_最长(['Age_Under50']+[Age_50[k]表示50岁时的k],'Between_50[u 80']+[Age 50[u 80[k]表示50岁时的k],'Greater_80']+[Age_80[k]表示80岁时的k],fillvalue=0))当然可以。只要运行我更改的代码。它会创建一条额外的线。你能告诉我怎么解吗?它对我来说很好,在这里没有多余的零。蟒蛇3!!!对于您刚才提供的链接,它不会创建额外的行。但是请记住,在您没有使用的代码中(cf.writerows)。请运行最后一个代码,并打开csv文件。你会明白我在说什么,我修好了。这是怎么做的。f=打开(“test.csv”,“w”,换行=”)