【问题标题】:How to get the values in the dictionary into the list form and then square them into list如何将字典中的值放入列表形式,然后将它们平方成列表
【发布时间】:2020-04-07 15:05:54
【问题描述】:

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

我想从元组中获取值并创建新列表并创建另外 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]

【问题讨论】:

  • 只要这样做:d = [list(_) for _ in dictionary.values()]
  • 嗯,我怀疑你真的在寻找 2D numpy 数组。那本词典是从哪里来的?
  • @accdias 那行不通。仔细查看列表中的内容
  • 哦!我现在明白了。我的错。您还希望附加密钥。
  • 不,他们要换位

标签: python list dictionary tuples list-comparison


【解决方案1】:

您可以使用 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 的 cmets 强调,只有在 pythong 版本为 3.6 或更高版本时,才能确保订购该 dict。如果您的 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)

【讨论】:

  • 我同意这是要走的路,但我认为这取决于 Python >= 3.6 以确保排序正确?
  • 你是什么意思?
  • 在 3.6 之前,像 sets 这样的字典没有顺序。无法保证dictionary={1:(1,2,3),2:(3,4,5),3:(6,7,8),4:(9,10,11),5:(12,13,14)} 会以正确的顺序出现在list(zip(*dictionary.values())) 中。
  • 啊,是的。我很生气,因为用户没有对他们使用 3.6 或更高版本或者他们不在乎的列表进行排序。为了完整起见,当我在家时,我将使用 3.6 之前的排序版本更新示例
  • 我认为一个警告就足够了。在这种情况中,您可以对键进行排序并获得正确答案,但我们很幸运,键是数字的,并且输出遵循它们的数字顺序。否则,他们可能需要在创建字典之前进行一些键排序:)
【解决方案2】:

我这里有一本字典

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]

【讨论】:

  • 如果字典中有 5000 个条目会怎样。你会给每个列表起一个名字吗?
  • 然后我将一个空列表追加元素到该列表中
【解决方案3】:

提供字典

首先取一个空列表并将其分配给变量“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))

【讨论】:

  • 如果字典中有 5000 个条目会怎样。你会给每个列表起一个名字吗?
【解决方案4】:

你可以这样做:

>>> 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]]

【讨论】:

    【解决方案5】:

    一旦获得字典的值,您可以使用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]])
    

    这是一个数组输出!无论如何,如果你只想要它在列表中,当然,你可以玩它!

    【讨论】:

    • 你可以用list_out = [val for val in dictionary.values()]的列表理解替换你的for循环,但你也可以只使用python标准库中的zip,而不是引入一个甚至可能没有安装在用户系统上的模块
    • 是的,同意,我只是提出另一种方法!但是你的回答更有说服力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2022-11-14
    • 2023-01-02
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多