第一个python程序看起来不对

时间:2015-12-09 06:40:30

标签: python

这是我的第一个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这样的东西?这花了我一个小时来输入所有

5 个答案:

答案 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!

“list comprehension”(或本案例中的dict comprehension)是你会喜欢的一件事:

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

玩得开心!