Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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_Python 3.x_List_Dictionary - Fatal编程技术网

Python:将嵌套列表中的值与字典中的值分开

Python:将嵌套列表中的值与字典中的值分开,python,python-3.x,list,dictionary,Python,Python 3.x,List,Dictionary,我有一份清单: mylist = [['A',4,2,5], ['C',3,9,5], ['D',2,5,6]] 还有一本字典: mydict = {'A' : 2, 'B' : 6, 'C' : 3} 如果嵌套列表的第一个值与mydict的键匹配,我想用mydict的值分割嵌套列表 mylist2应该如下所示: mylist2 = [['A',2,1,2.5], ['C',1,3,1.66666666667], ['D',2,5,6]] 我是python新手,尝试了很多,例如,这个,但不

我有一份清单:

mylist = [['A',4,2,5], ['C',3,9,5], ['D',2,5,6]]
还有一本字典:

mydict = {'A' : 2, 'B' : 6, 'C' : 3}
如果嵌套列表的第一个值与mydict的键匹配,我想用mydict的值分割嵌套列表

mylist2应该如下所示:

mylist2 = [['A',2,1,2.5], ['C',1,3,1.66666666667], ['D',2,5,6]]
我是python新手,尝试了很多,例如,这个,但不起作用:

mylist2 = []
for item in mylist:
    if item[0] == list(mydict.keys()):
        mylist2 = mylist[0][1:] / list(mydict.keys())
print(mylist2)
比如(快速而肮脏,可能是一个更优雅的解决方案,但希望它能帮助你):

单个字符(
item[0]
)不能等于所有
dict.keys()
的列表,这将是
['A','B','C']

您需要检查
项[0]
是否在dict中

mylist = [['A',4,2,5], ['C',3,9,5], ['D',2,5,6]] 

mydict = {'A' : 2, 'B' : 6, 'C' : 3}

mylist2 = []
for item in mylist:
    key, *vals = item   # split into key and rest of list
    if key in mydict:
        mylist2.append([key])  # create new list, append it, fill it with key
        for val in vals:
            mylist2[-1].append(val/mydict[key])  # add the other numbers to last inner list
    else:
        mylist2.append(item[:])  # add a copy of item
print(mylist2)
输出:

[['A', 2.0, 1.0, 2.5], ['C', 1.0, 3.0, 1.6666666666666667], ['D', 2, 5, 6]]


这是“长”版本-您可以使用
dict.get(key,1)
来减少此值,默认情况下返回key或1的值,并使用列表comp使其更“光滑”-请参见Tobias_k

您可以使用嵌套列表理解,使用
键,*rest
解压
mylist
的元素,并使用
dict.get
获取默认除数或1:

>>> [[key] + [x/mydict.get(key, 1) for x in rest] for key, *rest in mylist]
[['A', 2.0, 1.0, 2.5],
 ['C', 1.0, 3.0, 1.6666666666666667],
 ['D', 2.0, 5.0, 6.0]]
Hii B.T 我对您的需求使用了列表理解,如果您想尝试以下内容:

  mydict = {'A' : 2, 'B' : 6, 'C' : 3}
  mylist = [['A',4,2,5], ['C',3,9,5], ['D',2,5,6]]

  print map(lambda x:map(lambda y:float(y/mydict.get(x[0],1)) if not isinstance(y,str) else y,x),mylist) 

  Result:[['A', 2.0, 1.0, 2.0], ['C', 1.0, 3.0, 1.0], ['D', 2.0, 5.0, 6.0]]

我希望您不需要对此进行解释,map函数只需映射列表中的每个元素即可

您需要在列表元素上进行第二个循环,并对每个元素进行划分。这是python 2,而不是python 3<代码>映射
在python3中不返回列表,打印是一个函数。@PatrickArtner oops!我没看到,好吧,不管怎样,答案已经由mehrdad pedramfar得到;)。好提醒!
>>> [[key] + [x/mydict.get(key, 1) for x in rest] for key, *rest in mylist]
[['A', 2.0, 1.0, 2.5],
 ['C', 1.0, 3.0, 1.6666666666666667],
 ['D', 2.0, 5.0, 6.0]]
  mydict = {'A' : 2, 'B' : 6, 'C' : 3}
  mylist = [['A',4,2,5], ['C',3,9,5], ['D',2,5,6]]

  print map(lambda x:map(lambda y:float(y/mydict.get(x[0],1)) if not isinstance(y,str) else y,x),mylist) 

  Result:[['A', 2.0, 1.0, 2.0], ['C', 1.0, 3.0, 1.0], ['D', 2.0, 5.0, 6.0]]