Python字典生成,太多变量无法解包

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

正在尝试从从.csv文件解析的数据列表生成字典。出现“太多值无法解包”的错误,有没有解决方法

将有重复的键/多个值附加到每个键

我对python和编程相当陌生,所以如果你能简单地解释一下哪里出了问题/如何修复,请告诉我

脚本下面是打印res时显示的数据

#!/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))