如何将列表更改为HTML表? (蟒蛇)

时间:2013-05-13 10:03:08

标签: python html

这是我在没有HTML代码时所做的事情

from collections import defaultdict

hello = ["hello","hi","hello","hello"]
def test(string):
    bye = defaultdict(int)
    for i in hello:
        bye[i]+=1
    return bye

我想将此更改为html表,这是我到目前为止所尝试的内容,但它仍然无法正常工作

 def test2(string):
    bye= defaultdict(int)
    print"<table>"
    for i in hello:
        print "<tr>"
        print "<td>"+bye[i]= bye[i] +1+"</td>"
        print "</tr>"
    print"</table>"
    return bye

4 个答案:

答案 0 :(得分:2)

from collections import defaultdict

hello = ["hello","hi","hello","hello"]

def test2(strList):
  d = defaultdict(int)
  for k in strList:
    d[k] += 1
  print('<table>')
  for i in d.items():
    print('<tr><td>{0[0]}</td><td>{0[1]}</td></tr>'.format(i))
  print('</table>')

test2(hello)

<强>输出

<table>
  <tr><td>hi</td><td>1</td></tr>
  <tr><td>hello</td><td>3</td></tr>
</table>

答案 1 :(得分:1)

您可以使用collections.Counter计算列表中的出现次数,然后使用此信息创建html表。 试试这个:

from collections import Counter, defaultdict

hello = ["hello","hi","hello","hello"]
counter= Counter(hello)
bye = defaultdict(int)
print"<table>"
for word in counter.keys():
    print "<tr>"
    print "<td>" + str(word) + ":" + str(counter[word]) + "</td>"
    print "</tr>"
    bye[word] = counter[word]
print"</table>"

此代码的输出将是(您可以根据需要更改格式):

>>> <table>
>>> <tr>
>>> <td>hi:1</td>
>>> </tr>
>>> <tr>
>>> <td>hello:3</td>
>>> </tr>
>>> </table>

希望这对你有帮助!

答案 2 :(得分:1)

您无法在print语句的中间分配变量。您也无法在print语句中连接字符串类型和整数类型。

print "<td>"+bye[i]= bye[i] +1+"</td>"

应该是

bye[i] = bye[i] + 1
print "<td>"
print bye[i]
print '</td>'

您的return声明在最终print之前发布,因此永远无法打印。

全功能

def test2(string):
    bye= defaultdict(int)
    print"<table>"
    for i in hello:
        print "<tr>"
        bye[i] = bye[i] + 1
        print "<td>"
        print bye[i]
        print '</td>'
        print "</tr>"
        print"</table>"
        return bye

这将是您的代码的精确,有效的翻译,但我不确定您为什么这样做。 bye在这里毫无意义,因为你每次只打印1次

答案 3 :(得分:1)

Python collections模块包含Counter函数,完全符合所需条件:

>>> from collections import Counter
>>> hello = ["hello", "hi", "hello", "hello"]
>>> print Counter(hello)
Counter({'hello': 3, 'hi': 1})

现在,您要生成html。更好的方法是使用现有的库。例如Jinja2。您只需要安装它,例如使用pip

pip install Jinja2

现在,代码将是:

from jinja2 import Template
from collections import Counter

hello = ["hello", "hi", "hello", "hello"]

template = Template("""
<table>
    {% for item, count in bye.items() %}
         <tr><td>{{item}}</td><td>{{count}}</td></tr>
    {% endfor %}
</table>
""")

print template.render(bye=Counter(hello))