为什么zip只返回两个项目(Python 3)

时间:2015-11-01 15:34:33

标签: python list dictionary zip

我在理解这里发生的事情时遇到了问题。

networkfile="http://regulondb.ccg.unam.mx/menu/download/datasets/files/network_tf_gene.txt"

i = 36

lista = []

for n in range(0,8):

    data = urllib.request.urlopen(networkfile).readlines()[i]
    line = data.decode('utf-8')
    line2 = line[0:5]
    lista.append(line2)
    i = i + 1

print(lista)

values = []

for i in range(0,8):

    values.append('')

print(values)

d = dict(zip(lista,values))

print(d)

我知道这远不是解决此类问题的最有效方法,但我对此非常陌生,所以现在我们必须这样做。

我的问题是输出如下:

'AccB\t', 'AccB\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t']

['', '', '', '', '', '', '', '']

{'AccB\t': '', 'AcrR\t': ''}

前两个列表正常工作,正如print-command所暗示的那样,但是只要我将这两个列表压缩并创建它们的字典,字典就只包含每个列表中的两个元素,我不知道甚至在我试图找出几个小时之后,为什么会这样。

任何其他提示&改进建议也非常受欢迎。感谢。

1 个答案:

答案 0 :(得分:0)

我建议将代码分解为逻辑步骤,而不是在同一行中执行多个步骤。然后,您会发现zip并未向您提供两个项目,dict

lista = ['AccB\t', 'AccB\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t', 'AcrR\t']
values = ['', '', '', '', '', '', '', '']
>>> list(zip(lista, values))
[('AccB\t', ''), ('AccB\t', ''), ('AcrR\t', ''), ('AcrR\t', ''), ('AcrR\t', ''), ('AcrR\t', ''), ('AcrR\t', ''), ('AcrR\t', '')]

所以你看,你获得了所有预期的价值。但是当你将它放入字典时,你有许多相同的键,所以它们会被覆盖。字典只能给出每个键中的一个。

>>> dict(_)
{'AcrR\t': '', 'AccB\t': ''}

'AcrR\t''AccB\t'是唯一的两个键,因此在字典中,每个键都会显示一次。