当我尝试在python中使用sorted()函数时,它只按字母顺序对每个数组中的元素进行排序,因为前3个输出是:
[u'A', u'a', u'a', u'f', u'g', u'h', u'i', u'n', u'n', u's', u't']
[u'N', u'a', u'e', u'g', u'i', u'i', u'r']
[u'C', u'a', u'e', u'm', u'n', u'o', u'o', u'r']
这些应该分别是阿富汗,尼日利亚和喀麦隆,但它们只是在他们自己的阵列中排序。
我的代码在哪里出错?
import urllib2
import csv
from bs4 import BeautifulSoup
url = "http://en.wikipedia.org/wiki/List_of_ongoing_armed_conflicts"
soup = BeautifulSoup(urllib2.urlopen(url))
#f= csv.writer(open("test.csv","w"))
#f.writerow(["location"])
def unique(countries):
seen = set()
for country in countries:
l = country.lower()
if l in seen:
continue
seen.add(l)
yield country
for row in soup.select('table.wikitable tr'):
cells = row.find_all('td')
if cells:
for location in cells[3].find_all(text=True):
location = location.split()
for locations in unique(location):
print sorted(locations)
#f.writerow([location])
答案 0 :(得分:1)
您的变量名称很糟糕,让您感到困惑。 location
是一个位置列表,locations
是一个位置!
你想要:
for locations in cells[3].find_all(text=True):
locations = locations.split()
for location in sorted(unique(locations)):
print location
答案 1 :(得分:1)
对于循环的每次迭代,您可以获得一个或多个位置(作为列表)。所有这些都需要添加到单个列表中才能对其进行排序。
我们使用extend
方法来做到这一点。
locs = [] # contains all locations
for row in soup.select('table.wikitable tr'):
cells = row.find_all('td')
if cells:
# location here returns a list
for location in cells[3].find_all(text=True):
locs.extend(location.split())
print sorted(locs)
sorted(locs)
也是一个列表。要打印特定元素,您可以
specific_element = sorted(locs)[index]