Python字典生成,太多变量无法解包
正在尝试从从.csv文件解析的数据列表生成字典。出现“太多值无法解包”的错误,有没有解决方法 将有重复的键/多个值附加到每个键 我对python和编程相当陌生,所以如果你能简单地解释一下哪里出了问题/如何修复,请告诉我 脚本下面是打印res时显示的数据Python字典生成,太多变量无法解包,python,python-2.7,Python,Python 2.7,正在尝试从从.csv文件解析的数据列表生成字典。出现“太多值无法解包”的错误,有没有解决方法 将有重复的键/多个值附加到每个键 我对python和编程相当陌生,所以如果你能简单地解释一下哪里出了问题/如何修复,请告诉我 脚本下面是打印res时显示的数据 #!/usr/bin/python import csv import pprint pp = pprint.PrettyPrinter(indent=4) import sys import getopt res = [] import ar
#!/usr/bin/python
import csv
import pprint
pp = pprint.PrettyPrinter(indent=4)
import sys
import getopt
res = []
import argparse
parser = argparse.ArgumentParser()
parser.add_argument ("infile", metavar="CSV", nargs="+", type=str, help="data file")
args = parser.parse_args()
with open("out.csv","wb") as f:
output = csv.writer(f)
for filename in args.infile:
for line in csv.reader(open(filename)):
for item in line[2:]:
#to skip empty cells
if not item.strip():
continue
item = item.split(":")
item[1] = item[1].rstrip("%")
# print([line[1]+item[0],item[1]])
res.append([line[1]+item[0],item[1]])
# output.writerow([line[1]+item[0],item[1].rstrip("%")])
pp.pprint( res )
from collections import defaultdict
initial_list = [res]
d = defaultdict(list)
pp.pprint( d )
for k, v in initial_list:
d[k].append(float(v)) # possibly `int(v)` ?
还有控制台
[ ['P1L', '2.04'],
['Q2R', '1.93'],
['V3I', '20.03'],
['V3M', '78.18'],
['V3S', '1.67'],
['T4L', '1.16'],
['T12N', '75.60'],
['T12S', '22.73'],
['K14E', '1.03'],
['K14R', '50.65'],
['I15*', '63.94'],
['I15V', '35.30'],
['G17A', '38.31'],
['Q18R', '38.43'],
['L19T', '98.62'],
['L24*', '2.18'],
['D25E', '1.87'],
['D25N', '2.17'],
['M36I', '99.76'],
['S37N', '97.23'],
['R41K', '99.03'],
['L63V', '99.42'],
['H69K', '99.30'],
['I72V', '5.76'],
['V82I', '98.70'],
['L89M', '98.49'],
['I93L', '99.64'],
['P4S', '99.09'],
['V35T', '99.26'],
['E36A', '98.23'],
['T39D', '98.78'],
['G45R', '3.11'],
['S48T', '99.70'],
['V60I', '99.44'],
['K102R', '1.04'],
['K103N', '99.11'],
['G112E', '2.77'],
['D123N', '8.14'],
['D123S', '91.12'],
['I132M', '1.41'],
['K173A', '99.55'],
['Q174K', '99.68'],
['D177E', '98.95'],
['G190R', '2.56'],
['E194K', '2.54'],
['T200A', '99.28'],
['Q207E', '98.75'],
['R211K', '98.77'],
['W212*', '3.00'],
['L214F', '99.25'],
['V245E', '99.30'],
['E248D', '99.58'],
['D250E', '99.02'],
['T286A', '99.70'],
['K287R', '1.78'],
['E291D', '99.22'],
['V292I', '98.28'],
['I293V', '99.58'],
['V317A', '28.20'],
['L325V', '2.40'],
['G335D', '98.33'],
['F346S', '4.42'],
['N348I', '3.81'],
['R356K', '71.43'],
['M357I', '20.00'],
['M357T', '80.00']]
defaultdict(<type 'list'>, {})
Traceback (most recent call last):
File "test.py", line 40, in <module
for k, v in initial_list:
ValueError: too many values to unpack
[[P1L',2.04'],
[Q2R','1.93'],
[V3I',20.03'],
[V3M',78.18'],
['V3S','1.67'],
[T4L','1.16'],
[T12N','75.60'],
['T12S','22.73'],
[K14E',1.03'],
[K14R','50.65'],
[I15*,'63.94'],
[I15V',35.30'],
[G17A',38.31'],
['Q18R','38.43'],
[L19T',98.62'],
[L24*,'2.18'],
[D25E',1.87'],
[D25N','2.17'],
[M36I',99.76'],
['S37N','97.23'],
[R41K','99.03'],
[L63V','99.42'],
[H69K','99.30'],
[I72V','5.76'],
['V82I','98.70'],
[L89M','98.49'],
[I93L','99.64'],
[P4S',99.09'],
[V35T','99.26'],
[E36A',98.23'],
[T39D',98.78'],
[G45R',3.11'],
[S48T',99.70'],
[V60I','99.44'],
[K102R',1.04'],
[K103N','99.11'],
[G112E',2.77'],
[D123N','8.14'],
[D123S',91.12'],
[I132M','1.41'],
[K173A',99.55'],
['Q174K','99.68'],
[D177E',98.95'],
[G190R',2.56'],
[E194K','2.54'],
[T200A','99.28'],
[Q207E','98.75'],
[R211K','98.77'],
[W212*,'3.00'],
[L214F','99.25'],
['V245E','99.30'],
[E248D','99.58'],
[D250E',99.02'],
[T286A','99.70'],
[K287R','1.78'],
[E291D','99.22'],
[V292I','98.28'],
[I293V','99.58'],
[V317A',28.20'],
[L325V',2.40'],
[G335D',98.33'],
[F346S',4.42'],
[N348I',3.81'],
[R356K','71.43'],
[M357I',20.00'],
['M357T','80.00']]
defaultdict(,{})
回溯(最近一次呼叫最后一次):
文件“test.py”,第40行,在中,您正在将结果包装到一个列表中:
initial_list = [res]
然后尝试迭代列表:
d = defaultdict(list)
pp.pprint( d )
for k, v in initial_list:
d[k].append(float(v)) # possibly `int(v)` ?
您想在res
上循环:
d = defaultdict(list)
for k, v in res:
d[k].append(float(v))
您可以在CSV读取循环中执行所有这些操作:
谢谢你的解释,因为我才学了几周,这真的很有帮助。
from collections import defaultdict
d = defaultdict(list)
with open("out.csv","wb") as f:
output = csv.writer(f)
for filename in args.infile:
for line in csv.reader(open(filename)):
for item in line[2:]:
#to skip empty cells
if not item.strip():
continue
key, value = item.split(":", 1)
value = value.rstrip("%")
d[line1[1] + key].append(float(value))