[英]How to Print 2 dictionaries in 3 columns
大家好,我建立了2个字典,它们的键相同,但两者的值不同。 我正在尝试让代码像这样打印出来
Digit Count % 1 2 3 4 5 6 7 8 9
计数是countList,%是numFreq值,其数字也分别在Count和%中下降。
好的,因此数据文件看起来像这样(只做一些数字,因为文件很大
Census Data Alabama Winfield 4534 Alabama Woodland 208 Alabama Woodstock 1081 Alabama Woodville 743 Alabama Yellow Bluff 175 Alabama York 2477 Alaska Adak 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()
使用代码,您只需要执行以下操作:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.