循环插入到字典Python中

2024-03-29 12:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Z/OS、AS/400的Cobol,我正在努力学习新的编程语言,以便在家里做一些事情。所以我拿起Python开始尝试。你知道吗

但是现在我被一个我不明白为什么会发生的问题打动了,我已经在很多教程和其他关于字典的问题中做了很多研究,但是我仍然不知道我做错了什么,任何澄清都非常感谢。你知道吗

所以,我要做的是,我使用lxml进入服务器上的一个页面,从中返回一个文本列表,以及它们相应的链接,然后,我想创建一个包含两个结果(文本作为键,链接作为值)的字典,但事情并没有像我预期的那样进行。这是我的实际代码:

from lxml import html
import requests
page = requests.get('http://myexample.com.br/manga/')
tree = html.fromstring(page.text)
namelist = tree.xpath('//div[@class="manga_list"]/ul/li/a/text()')
linklist = tree.xpath('//div[@class="manga_list"]/ul/li/a/@href')
ind1 = 0
listall = {}
while ind1 < len(namelist):
   print "Name", namelist[ind1]
   print "Link", linklist[ind1]
   listall[namelist[ind1]] = linklist[ind1]
   print "Key", listall.keys()[ind1]
   print "Index", ind1
   ind1 += 1

正如你所见,我已经在循环中添加了一些打印行,这样我就可以在终端中看到目前正在使用的任何东西,这就是我得到的结果, 键会不断重复,因此它们不会被包括在内,但循环迭代中使用的当前名称和链接是正确的。。。所以我真的不明白这里发生了什么。。。你知道吗

Andres-MacBook-Pro:Documents Andre$ python teste.py
Name -6mm no Taboo
Link http://myexample.com.br/manga/6mm_no_taboo/
Key -6mm no Taboo
Index 0
Name -Rain-
Link http://myexample.com.br/manga/rain/
Key -6mm no Taboo
Index 1
Name -SINS-
Link http://myexample.com.br/manga/sins/
Key -6mm no Taboo
Index 2
Name :REverSAL
Link http://myexample.com.br/manga/reversal/
Key -6mm no Taboo
Index 3
Name ...Curtain
Link http://myexample.com.br/manga/curtain/
Key -6mm no Taboo
Index 4
Name ...Junai no Seinen
Link http://myexample.com.br/manga/junai_no_seinen/
Key ...Junai no Seinen
Index 5
Name ...no Onna
Link http://myexample.com.br/manga/no_onna/
Key ...Junai no Seinen
Index 6
Name ...Seishunchuu!
Link http://myexample.com.br/manga/seishunchuu/
Key ...Junai no Seinen
Index 7
Name ...Virgin Love.
Link http://myexample.com.br/manga/virgin_love/
Key ...Junai no Seinen
Index 8
Name .925 (NISHI Uko)
Link http://myexample.com.br/manga/925_nishi_uko/
Key ...Junai no Seinen
Index 9
Name .hack//4koma
Link http://myexample.com.br/manga/hack_4koma/
Key ...Junai no Seinen
Index 10
Name .hack//Alcor
Link http://myexample.com.br/manga/hack_alcor/
Key ...Junai no Seinen
Index 11
Name .hack//G.U.+
Link http://myexample.com.br/manga/hack_g_u/
Key ...Junai no Seinen
Index 12
Name .Hack//GnU
Link http://myexample.com.br/manga/hack_gnu/
Key ...Junai no Seinen
Index 13
Name .hack//Link
Link http://myexample.com.br/manga/hack_link/
Key ...Junai no Seinen
Index 14
Name .hack//Tasogare no Udewa Densetsu
Link http://myexample.com.br/manga/hack_tasogare_no_udewa_densetsu/
Key ...Junai no Seinen
Index 15
Name .hack//XXXX
Link http://myexample.com.br/manga/hack_xxxx/
Key ...Junai no Seinen
Index 16
Name .traeH
Link http://myexample.com.br/manga/traeh/
Key ...Junai no Seinen
Index 17
Name 'Hajimete' Ageru!
Link http://myexample.com.br/manga/hajimete_ageru/
Key ...Junai no Seinen
Index 18
Name "Aishiteru", Uso Dakedo.
Link http://myexample.com.br/manga/aishiteru_uso_dakedo/
Key ...Junai no Seinen
Index 19
Name "Aoi" - Hikaru ga Chikyuu ni Itakoro......
Link http://myexample.com.br/manga/aoi_hikaru_ga_chikyuu_ni_itakoro/
Key ...Junai no Seinen
Index 20
Name "Bungaku Shoujo" to Ue Kawaku Yuurei
Link http://myexample.com.br/manga/bungaku_shoujo_to_ue_kawaku_yuurei/
Key ...Virgin Love.
Index 21

Tags: keynonamebrcomhttpindexlink
1条回答
网友
1楼 · 发布于 2024-03-29 12:27:46

字典没有顺序,因此您获取键的顺序(对于dict.keys())调用可能与您期望的不同(似乎是这样)。如果您真的想检查字典中的所有内容,可以尝试打印完整的字典(或者可能是完整的dict.keys())。示例-

print "Listall", listall

或者

print "Keys",  listall.keys()

我也不是100%确定xpath是否总是以完全相同的顺序返回元素,但是我想说最好不要冒险。你可以像这样运行xpath-

tree.xpath('//div[@class="manga_list"]/ul/li')

然后对于上述xpath结果中的每个元素,运行两个xpath以获取文本和相应的href,例如-

from lxml import html
import requests
page = requests.get('http://myexample.com.br/manga/')
tree = html.fromstring(page.text)
lilist = tree.xpath('//div[@class="manga_list"]/ul/li')
listall = {}
for lielem in lilist:
    name = lielem.xpath('./a/text()')
    link = lielem.xpath('./a/@href')
    print "Name", name
    print "Link", link
    listall[name] = link
    print "Keys", listall.keys()

如果您希望名称列表和链接列表在此之后,只需执行-listall.keys()(对于名称列表)和listall.values()(对于值列表)。你知道吗


如果要保持插入键的顺序,可以使用-^{},例如-

from lxml import html
import requests
from collections import OrderedDict
page = requests.get('http://myexample.com.br/manga/')
tree = html.fromstring(page.text)
lilist = tree.xpath('//div[@class="manga_list"]/ul/li')
listall = OrderedDict()
ind = 0
for lielem in lilist:
    name = lielem.xpath('./a/text()')
    link = lielem.xpath('./a/@href')
    print "Name", name
    print "Link", link
    listall[name] = link
    print "Keys", listall.keys()[ind]
    ind += 1

相关问题 更多 >