1

嘿伙计们,所以我设置了 2 个字典,它们的键相同,但两者的值不同。我试图让代码像这样打印出来

位数 %
1         
2
3
4
5
6
7
8
9

count 是 countList,% 是 numFreq 值,它们的数字也分别在 Count 和 % 中下降。

好的,所以数据文件看起来像这样(只做一些数字,因为文件很大

人口普查数据
阿拉巴马州温菲尔德 4534
阿拉巴马州林地 208
阿拉巴马州伍德斯托克 1081
阿拉巴马州伍德维尔 743
阿拉巴马州黄崖 175
阿拉巴马州约克 2477
阿拉斯加阿达克 361

计数是数字的第一位数字的出现次数。我基本上把每一行都变成了一个列表,并将列表的最后一个值(数字)附加到一个新列表中。因此,我计算了 1, 2, 3, 4, 5, 6 , 7, 8 ,9 出现的次数。这就是 countList 所代表的。所以我将它存储在字典中,键是数字,计数是值。% 是计数的相对频率。所以我建立了一个新列表并计算了相对频率,基本上是计数+所有计数的总和,并将其四舍五入到一位数。% 列具有每个数字的相对计数。我把它放入字典中,其中的键是数字 1、2、3、4、5、6、7、8、9。所以现在我只需要将这些数字打印到 3 列中,

到目前为止,这是我的代码

def main():
  num_freq = {}
  pop_num = []
  inFile = open ("Census__2008.txt", "r")
  count = 0
  for line in inFile:
    if (count == 0):
      count += 1
      continue
    else:
      count += 1
      line = line.strip()
      word_list = line.split()
      pop_num.append (word_list[-1])
  counts = {}
  for x in pop_num:
    k = str(x)[0]
    counts.setdefault(k, 0)
    counts[k] += 1
  countList = [counts[str(i)] for i in range(1,10)]
  sumList = sum(countList)

  dictCount = {}
  dictCount[1] = countList[0]
  dictCount[2] = countList[1]
  dictCount[3] = countList[2]
  dictCount[4] = countList[3]
  dictCount[5] = countList[4]
  dictCount[6] = countList[5]
  dictCount[7] = countList[6]
  dictCount[8] = countList[7]
  dictCount[9] = countList[8]
  num_Freq = []
  for elm in countList:
    rel_Freq = 0
    rel_Freq = rel_Freq + ((elm / sumList) * 100.0)
    rel_Freq = round(rel_Freq, 1)
    num_Freq.append(rel_Freq)
  freqCount = {}
  freqCount[1] = num_Freq[0]
  freqCount[2] = num_Freq[1]
  freqCount[3] = num_Freq[2]
  freqCount[4] = num_Freq[3]
  freqCount[5] = num_Freq[4]
  freqCount[6] = num_Freq[5]
  freqCount[7] = num_Freq[6]
  freqCount[8] = num_Freq[7]
  freqCount[9] = num_Freq[8]

  print ("Digit" "  ", "Count", "   ", "%")
  print (

main()
4

1 回答 1

1

使用您的代码,您只需要执行以下操作:

for i in range(1, 10):
    print (i, dictCount[i], freqCount[i])

但是你可以简化很多:

import collections

data = []

with open("Census__2008.txt") as fh:
    fh.readline()    # skip first line
    for line in fh:
        value = line.split()[-1]
        data.append(value)

c = collections.Counter([x[0] for x in data])
total = sum(c.values())
print("Digit", "Count", "%")
for k, v in sorted(c.iteritems()):
    freq = v / total * 100
    round_freq = round(freq, 1)
    print(k, v, round_freq)
于 2013-08-15T00:03:20.513 回答