需要帮助,以在另一个词典中转换元组词典中的一些键



i有一个我在csv.dictreader((中使用CSV模块阅读的CSV文件。我有这样的输出:

{'biweek': '1', 'year': '1906', 'loc': 'BALTIMORE', 'cases': 'NA', 'pop': '526822.1365'}
{'biweek': '2', 'year': '1906', 'loc': 'BALTIMORE', 'cases': 'NA', 'pop': '526995.246'}
{'biweek': '3', 'year': '1906', 'loc': 'BALTIMORE', 'cases': 'NA', 'pop': '527170.1981'}
{'biweek': '4', 'year': '1906', 'loc': 'BALTIMORE', 'cases': 'NA', 'pop': '527347.0136'}

,我需要将" LOC"作为新dict的关键,而" loc"作为该新dict的值,因为" loc"在文件中具有很多重复。

with open('Dalziel2015_data.csv') as fh:
    new_dct = {}
    cities = set()
    cnt = 0
    reader = csv.DictReader(fh)
    for row in reader:
        data = dict(row)
        cities.add(data.get('loc'))
        for (k, v) in data.items():
            if data['loc'] in cities:
                cnt += 1
                new_dct[data['loc']] = cnt + 1
    print(new_dct)

example_file:

biweek,year,loc,cases,pop
1,1906,BALTIMORE,NA,526822.1365
2,1906,BALTIMORE,NA,526995.246
3,1906,BALTIMORE,NA,527170.1981
4,1906,BALTIMORE,NA,527347.0136
5,1906,BALTIMORE,NA,527525.7134
6,1906,BALTIMORE,NA,527706.3183
4,1906,BOSTON,NA,630880.6579
5,1906,BOSTON,NA,631295.9457
6,1906,BOSTON,NA,631710.8403
7,1906,BOSTON,NA,632125.3403
8,1906,BOSTON,NA,632539.4442
9,1906,BOSTON,NA,632953.1503
10,1907,BRIDGEPORT,NA,91790.75578
11,1907,BRIDGEPORT,NA,91926.14732
12,1907,BRIDGEPORT,NA,92061.90153
13,1907,BRIDGEPORT,NA,92198.01976
14,1907,BRIDGEPORT,NA,92334.50335
15,1907,BRIDGEPORT,NA,92471.35364
17,1908,BUFFALO,NA,413661.413
18,1908,BUFFALO,NA,413934.7646
19,1908,BUFFALO,NA,414208.4097
20,1908,BUFFALO,NA,414482.3523
21,1908,BUFFALO,NA,414756.5963
22,1908,BUFFALO,NA,415031.1456
23,1908,BUFFALO,NA,415306.0041
24,1908,BUFFALO,NA,415581.1758
25,1908,BUFFALO,NA,415856.6646
6,1935,CLEVELAND,615,890247.9867
7,1935,CLEVELAND,954,890107.9192
8,1935,CLEVELAND,965,889967.7823
9,1935,CLEVELAND,872,889827.5956
10,1935,CLEVELAND,814,889687.3781
11,1935,CLEVELAND,717,889547.1492
12,1935,CLEVELAND,770,889406.9283
13,1935,CLEVELAND,558,889266.7346

我做到了。我的钥匙还好吗,但我没有正确的计数。我的结果:

{'BALTIMORE': 29, 'BOSTON': 59, 'BRIDGEPORT': 89, 'BUFFALO': 134, 'CLEVELAND': 174}

我知道熊猫是一个很好的工具,但我需要使用CSV模块的代码。
如果你们中的任何一个可以帮助我完成计数,我感谢。
谢谢!
Paulo

您可以使用collections.Counter来计算CSV文件中城市的出现。Counter.keys()还将为您提供CSV中的所有城市:

import csv
from collections import Counter
with open('csvtest.csv') as fh:
    reader = csv.DictReader(fh)
    c = Counter(row['loc'] for row in reader)
    print(dict(c))
    print('Cities={}'.format([*c.keys()]))

打印:

{'BALTIMORE': 6, 'BOSTON': 6, 'BRIDGEPORT': 6, 'BUFFALO': 9, 'CLEVELAND': 8}
Cities=['BALTIMORE', 'BOSTON', 'BRIDGEPORT', 'BUFFALO', 'CLEVELAND']

您正在更新全局计数器,而不是特定位置的计数器。您还迭代每一行的每一列并无缘无故地更新。

尝试以下操作:

with open('Dalziel2015_data.csv') as fh:
    new_dct = {}
    cities = set()
    reader = csv.DictReader(fh)
    for row in reader:
        data = dict(row)
        new_dct[data['loc']] = new_dct.get(data['loc'], 0) + 1
    print(new_dct)

此行:new_dct[data['loc']] = new_dct.get(data['loc'], 0) + 1将获得该城市的最后一个计数器,并将数字增加一个。如果计数器尚不存在,则函数get将返回0。

最新更新