如何将字典中的值放入列表形式,然后将其平方成列表

时间:2019-12-14 11:44:50

标签: python list dictionary tuples list-comparison

我有一个元组形式的值字典,如何获取列表形式的值。

我想从元组中获取值并创建新列表,并使用它们的正方形创建另外3个列表。

dictionary={1:(1,2,3),2:(3,4,5),3:(6,7,8),4:(9,10,11),5:(12,13,14)}
s=list(d.values())
d=[item for t in s for item in t]
print(d)

我使用列表理解功能,得到以下输出:

[1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

使用列表理解

预期输出:

[1,3,6,9,12],
[2,4,7,10,13],
[3,5,8,11,14],

squares ** 2在三个列表上方输出:

[1,9,36,81,144],
[4,16,49,100,169],
[9,25,64,121,196]

5 个答案:

答案 0 :(得分:2)

您可以使用zip将每个列表的索引元素收集在一起,然后使用列表理解将它们平方起来

dictionary={1:(1,2,3),2:(3,4,5),3:(6,7,8),4:(9,10,11),5:(12,13,14)}
list_vals = list(zip(*dictionary.values()))
squares = [[num ** 2 for num in nums] for nums in list_vals]
print(list_vals)
print(squares)

输出

[(1, 3, 6, 9, 12), (2, 4, 7, 10, 13), (3, 5, 8, 11, 14)]
[[1, 9, 36, 81, 144], [4, 16, 49, 100, 169], [9, 25, 64, 121, 196]]

感谢@roganjosh的评论突出显示,只有在pythong版本为3.6或更高版本时,才能保证可以订购该字典。如果您的python版本小于该版本,则首先需要按键顺序对值进行排序。下面是一个示例。

dictionary={2:(3,4,5),3:(6,7,8),4:(9,10,11),5:(12,13,14),1:(1,2,3)}
ordered_key_val = sorted(dictionary.items(), key=lambda items: items[0])
list_vals = list(zip(*[val for key, val in ordered_key_val]))
squares = [[num ** 2 for num in nums] for nums in list_vals]
print(list_vals)
print(squares)

答案 1 :(得分:1)

一旦获得字典的值,就可以使用numpy来转置整个列表。您可以使用以下程序

import numpy as np 
dictionary={1:(1,2,3),2:(3,4,5),3:(6,7,8),4:(9,10,11),5:(12,13,14)}
list_out= []
for i in dictionary.keys():
    list_out.append(dictionary[i])
tran_list =  np.transpose(list_out)
out_list = tran_list*tran_list

此输出为:

>>> out_list
array([[  1,   9,  36,  81, 144],
       [  4,  16,  49, 100, 169],
       [  9,  25,  64, 121, 196]])

这是一个数组输出!无论如何,如果您只希望它在列表中,那么您就可以使用它!

答案 2 :(得分:1)

提供词典

首先获取一个空列表并将其分配给变量“ l”

使用列表理解将值分开并将其存储在变量中

迭代值并附加空白列表“ l”

现在使用索引值i [o],i [1],i [2]迭代“ l”并分别存储在各种变量中

使用map函数对变量求平方并存储值并使用变量列表进行打印

x = {
    1:(1,2,3),
    2:(4,5,6),
    3:(7,8,9),
    4:(10,11,12),
    5:(13,14,15)
}
l = []
y = [i for i in x.values()]
for i in y:
    l.append(i)
print(l)

m = [i[0] for i in l]
n = [i[1] for i in l]
o = [i[2] for i in l]
m1 = map(lambda i:i**2, m)
n1 = map(lambda i:i**2, n)
o1 = map(lambda i:i**2, o)
print(m)
print(list(m1))
print(n)
print(list(n1))
print(o)
print(list(o1))

答案 3 :(得分:0)

您可以这样:

>>> temp = list(zip(*dictionary.values()))
>>> [list(i) for i in temp]
[[1, 3, 6, 9, 12], [2, 4, 7, 10, 13], [3, 5, 8, 11, 14]]
>>> [[i**2 for i in elem] for elem in temp]
[[1, 9, 36, 81, 144], [4, 16, 49, 100, 169], [9, 25, 64, 121, 196]]

答案 4 :(得分:0)

我这里有一本字典

d={1:(1,2,3),2:(4,5,6),3:(7,8,9),4:(10,11,12),5:(13,14,15)}

首先我要在三个列表中获取元组的值,然后在这里使用列表理解下面的代码给出了三个列表中的元组值

myList1 = [d [i][0] for i in (d.keys()) ]
print(myList1)
myList2 = [d [i][1] for i in (d.keys()) ]
print(myList2)
myList3 = [d [i][2] for i in (d.keys()) ]
print(myList3)

所有元组值都转换为列表形式

[1, 4, 7, 10, 13]
[2, 5, 8, 11, 14]
[3, 6, 9, 12, 15]

现在我想在这里对三个列表中的元素求平方。我使用了lambda表达式,下面的代码对列表中的元素求平方

a1= list(map(lambda x: x**2 ,myList1))
print(a1)
a2= list(map(lambda x: x**2 ,myList2))
print(a2)
a3= list(map(lambda x: x**2 ,myList3))
print(a3)

输出为:

[1, 16, 49, 100, 169]
[4, 25, 64, 121, 196]
[9, 36, 81, 144, 225]