Python中2维数组/矩阵转化为字典(矩阵中第一列含有重复元素)??

例如将a=[[3,789],[1,100],[1,102],[2,102],[1,106],[2,456]];转化为一个字典b={1:[100,102,102],2:[102,456],3:[789]}

如果用强制转换:

1 >>> a=[[3,789],[1,100],[1,102],[2,102],[1,106],[2,456]];
2 >>> b=dict(a)
3 >>> b
4 {1: 106, 2: 456, 3: 789}
5 >>> 

结果显然删除了字典中重复键所对应的值;

 1 # 将列表转化为字典
 2 def listTodict():
 3     a=[[3,789],[1,100],[1,102],[2,102],[1,106],[2,456]];
 4     lenArr=len(a);
 5     # 列出第一列所有的元素值,包含重复元素
 6     firstCol=[];
 7     for i in range(lenArr):
 8         firstCol.append(a[i][0]); # [3, 1, 1, 2, 1, 2]
 9     # 列出第一列所有的不重复元素
10     firstColNotRep=set(firstCol);    # {1,2,3}集合中元素没有顺序
11     firstColNotRep=list(firstColNotRep); # firstColNotRep=[1,2,3]
12     # 统计第一列所有的不重复元素的个数
13     lenfirstColNotRep=len(firstColNotRep);
14     b=[];c=[];
15     for i in range(lenfirstColNotRep):
16         b.append([firstColNotRep[i]]);  # [[1], [2], [3]]
17     for i in range(lenfirstColNotRep):
18         for j in range(lenArr):
19             if firstColNotRep[i]==a[j][0]: # firstColNotRep=[1,2,3]
20                 print(j);
21                 b[i].append(a[j][1]);
22     return b;
23 # 结果b=[[1,100,102,106],[2,102,456], [3,789]]
24
25 # 怎样将[1,100,102,106]先转为[1,[100,102,106]]转化为[1:[100,102,106]]
26 def listToDict1():
27     d=[[1,100,102,106],[2,102,456], [3,789]];
28     e={};
29     for i in range(len(d)):
30         e[d[i][0]]=d[i][1:];
31     return e;
32     
时间: 2024-07-29 02:41:58

Python中2维数组/矩阵转化为字典(矩阵中第一列含有重复元素)??的相关文章

matlab中元胞数组(cell)转换为矩阵

matlab中元胞数组(cell)转换为矩阵. cell转换为矩阵函数为:cell2mat(c),其中c为待转换的元胞数组: 转化之后的矩阵可能不满足我们对矩阵维数的要求,那么也许还需要下面两个函数: ——reshape(A,m,n,p,...),将矩阵A变换为m*n*p*...的矩阵: ——permute(A,[1,3,2]),将矩阵A的第3维和第2维交换,从而满足顺序要求: 下面举一个我自己用过的例子: H——<K*1>cell,其中每个元素为U*S*N*T的四维矩阵(H为WINNERII

thinPHP中多维数组的遍历

$drug=array( 'ACEI'=>array(array('ch_name'=>'卡托普利','en_name'=>'captopril'),array('ch_name'=>'依那普利','en_name'=>'enalapril'), array('ch_name'=>'赖诺普利','en_name'=>'lisinopril')), 'ARB'=>array(array('ch_name'=>'依普罗沙坦','en_name'=>'

Python的二维数组

Python一维数组初始化: >>> list=[] >>> type(list) <type 'list'> >>> list [] Python二维数组初始化: >>> lists = [[]] * 3 >>> lists [[], [], []] >>> lists[0].append(3) >>> lists [[3], [3], [3]] "[[]]

[经典面试题]给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1

[题目] 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1. [分析] 此题也就是求target在数组中第一次出现的位置.这里可能会有人想先直接用原始的二分查找,如果不存在直接返回-1, 如果存在,然后再顺序找到这个等于target值区间的最左位置,这样的话,最坏情况下的复杂度就是O(n)了,没有完全发挥出二分查找的优势. 这里的解法具体过程请参考实现代码与注释. [代码] /*********************************

python 一个二维数组和一个整数,判断数组中是否含有该整数

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. def find(target, array): i = 0 j = len(array[0]) - 1 while i < len(array) and j >= 0: base = array[i][j] if target == base: return True elif target >

python的二维数组操作

需要在程序中使用二维数组,网上找到一种这样的用法: 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0]] myList = [[0] * 3] * 4 但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成 [[0,1,0], [0,1,0], [0,1,0], [0,1,0]] 为什么...一时搞不懂,后面翻阅The Python Standard Library 找到答案 lis

js中多维数组转一维

法一:使用数组map()方法,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组. var arr = [1,[2,[[3,4],5],6]]; function unid(arr){ var arr1 = (arr + '').split(',');//将数组转字符串后再以逗号分隔转为数组 var arr2 = arr1.map(function(x){ return Number(x); }); return arr2; } console.log(unid(arra)); 法二

关于Java中多维数组的内存结构分析

基本概念 本文主要针对JVM中关于一维数组和二维数组的内存模型分析.验证.讨论![仅供参考]. 1.概念模型 1)一维数组 int arr[] = new int[3]; 2)二维数组 int[ ][ ] arr = new int[3][ ]; arr[0] = new int[3]; arr[1] = new int[5]; arr[2] = new int[4]; 3)Java中的对象(本章节主要分析和数组相关的内容,关于Java对象的Memory结构会在以后说明!) class A {

CUDA中多维数组以及多维纹理内存的使用

纹理存储器(texture memory)是一种只读存储器,由GPU用于纹理渲染的图形专用单元发展而来,因此也提供了一些特殊功能.纹理存储器中的数据位于显存,但可以通过纹理缓存加速读取.在纹理存储器中可以绑定的数据比在常量存储器可以声明的64K大很多,并且支持一维.二维或者三维纹理.在通用计算中,纹理存储器十分适合用于实现图像处理或查找表,并且对数据量较大时的随机数据访问或者非对齐访问也有良好的加速效果. 纹理存储器在硬件中并不对应一块专门的存储器,而实际上是牵涉到显存.两级纹理缓存.纹理抓取单