Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于列值将列表转换为元组字典_Python_List_Dictionary_Tuples_Data Conversion - Fatal编程技术网

Python 基于列值将列表转换为元组字典

Python 基于列值将列表转换为元组字典,python,list,dictionary,tuples,data-conversion,Python,List,Dictionary,Tuples,Data Conversion,我正在尝试用Python转换以下列表: headers = [ 'Col1','Col2','Col3','Col4' ] data = [[ '1','A','D','X'] [ '2','A','D','X'] [ '3','A','C','X'] [ '1','B','F','X'] [ '2','B','F','X'] ] 使用Col2作为唯一键的元组字典,因此输出如下所示:

我正在尝试用Python转换以下列表:

headers = [ 'Col1','Col2','Col3','Col4' ]
data    = [[  '1','A','D','X']
           [  '2','A','D','X']  
           [  '3','A','C','X']  
           [  '1','B','F','X']
           [  '2','B','F','X'] ]
使用Col2作为唯一键的元组字典,因此输出如下所示:

{ 
  'A': [( '1','D','X'),('2','D','X'),('3','C','X') ]
  'B': [( '1','F','X'),('2','F','X') ]
}
到目前为止,我已经设法将它转置并压缩到一个以列为键的字典中,但我在那里遇到了麻烦

transpose_result = map(list, zip(*data))
data = dict(zip(headers, transpose_result))
你能帮忙吗?
提前感谢。

迭代
数据
列表项,并使用
行[1]
作为键和
行[:1]+行[2:][/code>为值(列表项)构建新词典:

用于在字典中没有键时使用空列表填充字典,因此可以安全地执行
list.append
调用


如果使用,它可能更简单:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> for row in data:
...     d[row[1]].append(row[:1] + row[2:])
... 
>>> d
defaultdict(<type 'list'>, {
    'A': [['1', 'D', 'X'], ['2', 'D', 'X'], ['3', 'C', 'X']],
    'B': [['1', 'F', 'X'], ['2', 'F', 'X']]})
>>> dict(d)  # to convert it back to dict
{'A': [['1', 'D', 'X'], ['2', 'D', 'X'], ['3', 'C', 'X']],
 'B': [['1', 'F', 'X'], ['2', 'F', 'X']]}
>>从集合导入defaultdict
>>>d=默认DICT(列表)
>>>对于数据中的行:
...     d[第[1]行]。追加(第[:1]行+第[2]行)
... 
>>>d
defaultdict({
'A':['1','D','X'],['2','D','X'],['3','C','X'],
‘B’:[[1',F',X'],[2',F',X']})
>>>dict(d)#将其转换回dict
{'A':['1','D','X'],['2','D','X'],['3','C','X'],
'B':[[1',F',X'],[2',F',X']}
希望这有帮助

data    = [[  '1','A','D','X'],
           [  '2','A','D','X'],
           [  '3','A','C','X'],
           [  '1','B','F','X'],
           [  '2','B','F','X'] ]

res = {}

for d in data:
   key = d[1]
   d.remove(key)
   if key in res.keys():
          res[key].append(d)
   else:
          res[key] = [d]

为什么您需要的是
标题
?它不会出现在输出上。
data    = [[  '1','A','D','X'],
           [  '2','A','D','X'],
           [  '3','A','C','X'],
           [  '1','B','F','X'],
           [  '2','B','F','X'] ]

res = {}

for d in data:
   key = d[1]
   d.remove(key)
   if key in res.keys():
          res[key].append(d)
   else:
          res[key] = [d]