这是我的第一个python程序,我已经阅读了一段时间的python并且该程序有效,但我不认为我做的一切正确。这是代码
dict_top = {'a':[0], 'b':[0], 'c':[0], 'd':[0], 'e':[0], 'f':[0], 'g':[0],
'h':[0], 'i':[0], 'j':[0], 'k':[0], 'l':[0], 'm':[0], 'n':[0],
'o':[0], 'p':[0], 'q':[0], 'r':[0], 's':[0], 't':[0], 'u':[0],
'v':[0], 'w':[0], 'x':[0], 'y':[0], 'z':[0]}
with open('planet-names.txt') as file_object: # this will automatically close
for planet_name in file_object:
for letter in planet_name:
if letter in dict_top:
a = dict_top[letter][0]
dict_top[letter][0] = a + 1
dict_top[letter].append(planet_name.find(letter))
print(dict_top)
planet-names.txt
只是每条线上行星的名称
我想计算A,B,C的时间发生在一堆行星的每个名字中
并记录他们在不同的位置。
这不是功课!我试图制作一个随机生成行星名称的程序!!!
你应该如何编写像dict_top这样的东西?这花了我一个小时来输入所有
答案 0 :(得分:4)
使用collections.Counter
import collections
c = collections.Counter()
with open('planet-names.txt') as file_object: # this will automatically close
for planet_name in file_object:
c.update(collections.Counter(planet_name))
print c
或者您可以使用dict.fromkeys
import string
dict_top = dict.fromkeys(list(string.ascii_lowercase),[0])
答案 1 :(得分:2)
假设您的文件包含姓名' earth',' jupitor',' saturn',' pluto'
dict_top = {'a':[0], 'b':[0], 'c':[0], 'd':[0], 'e':[0], 'f':[0], 'g':[0], 'h':[0], 'i':[0], 'j':[0], 'k':[0], 'l':[0], 'm':[0], 'n':[0], 'o':[0], 'p':[0], 'q':[0], 'r':[0], 's':[0], 't':[0], 'u':[0], 'v':[0], 'w':[0], 'x':[0], 'y':[0], 'z':[0]}
with open('planet-names.txt') as file_object:
for planet_name in file_object.readlines():
for letter in planet_name:
if letter in dict_top:
dict_top[letter][0] += 1
print(dict_top)
这将返回如下的计数:
{'a': [2],
'b': [0],
'c': [0],
'd': [0],
'e': [1],
'f': [0],
'g': [0],
'h': [1],
'i': [1],
'j': [1],
'k': [0],
'l': [1],
'm': [0],
'n': [1],
'o': [2],
'p': [2],
'q': [0],
'r': [3],
's': [1],
't': [4],
'u': [3],
'v': [0],
'w': [0],
'x': [0],
'y': [0],
'z': [0]}
答案 2 :(得分:1)
你想以某种聪明的方式定义dict top吗?如果是,则使用
titles = soup.find_all('tr')
for tag in titles:
for item in tag.find_all('i'):
if item.a and item.parent.parent.li == None and item.parent.attrs == {}:
print item.a.text
print item.parent.next_sibling
答案 3 :(得分:0)
使用fromkeys:
from string import ascii_lowercase
dict_top=dict.fromkeys(list(ascii_lowercase,[0])
答案 4 :(得分:0)
欢迎使用Python!
dict_top = {k:[0] for k in "abcdefghijklmnopqrstuvwxyz"}
然而,我会以不同的方式编写它(不用太多考虑),因为我猜这些没有出现在任何名称中的字母都是无用的:
dict_top = {}
with open('planet-names.txt') as file_object:
for planet_name in file_object:
for i,letter in enumerate(planet_name):
try:
dict_top[letter][0] +=1
dict_top[letter].append(i)
except KeyError:
dict_top[letter]=[1,i]
关于“枚举”检查https://docs.python.org/3.5/library/functions.html
玩得开心!