【问题标题】:Need help on this error: ValueError: too many values to unpack需要有关此错误的帮助:ValueError:要解包的值太多
【发布时间】:2016-06-07 21:45:40
【问题描述】:
from  xlrd import open_workbook
book = open_workbook('Workbook2.csv')
sheet = book.sheet_by_index(0)
keys = [sheet.cell(0,col_index).value for col_index in xrange(sheet.ncols)]
dict_list =[]

for row_index in xrange(1,sheet.nrows):
   d={keys[col_index]: sheet.cell(row_index, col_index).value for col_index in    xrange(sheet.ncols)}
   dict_list.append(d)

print dict_list

for i in range(len(dict_list)):
  for key,val in dict_list[i]:
    print val

试图打印出 val,但它给出了这个错误:ValueError: too many values to unpack。有谁可以帮忙?

【问题讨论】:

  • for key,val in dict_list[i].items()?
  • CSV 的内容是什么?

标签: python


【解决方案1】:

如果您使用的是 Python 2,请尝试:

for key, val in dict_list[i].iteritems():

或者使用 Python 3:

for key, val in dict_list[i].items():

或者,如果您只需要键或值,您可以分别使用dict_list[i].keys()dict_list[i].values()

【讨论】:

  • 当你遍历一个字典时,你只会得到键。无法将密钥解包到键/值对中。价值信息甚至不存在。字典上的items() 方法返回一个带有键/值对的列表,所以如果你有字典{'a': 1, 'b': 2} 它返回[('a', 1), ('b', 2)]。现在您可以将这些数据解压缩为一个键和一个值。 iteritems() 方法不返回包含键和值的列表,而是返回一个迭代器。这通常是更好的选择,因为键/值列表可能会占用大量内存。
  • 在 Python 3 中,删除了 iteritems() 方法,现在 items() 方法返回了一个迭代器。
  • 好的,这就是我打印出来的结果 val: [xxx, 123, www.123.com] [xxx, 245, www.245.com],你看到发生了两个循环.有一个问题,我如何使用每个元素,例如如何从 val 中解压 xxx 或 123?
  • 如果是普通列表,写val[0]获取第一个条目,val[1]获取第二个条目,val[2]获取列表中的第三个条目。
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多