[{50: 2, 75: 3, 99: 4}, {50: 5, 75: 6, 99: 7}, {50: 8, 75: 9, 99:10}]
以下是Python中的字典数组。我想在Python中将数组转换为以下三个数组:
[2, 5, 8] # corresponding to 50.
[3, 6, 9] # corresponding to 75.
[4, 7, 9] # corresponding to 99.
答案 0 :(得分:4)
一种方法可能是使用defaultdict
使其成为字典,其中list
的值对应于键:
from collections import defaultdict
my_list = [{50: 2, 75: 3, 99: 4}, {50: 5, 75: 6, 99: 7}, {50: 8, 75: 9, 99:10}]
my_dict_list = defaultdict(list)
for value in my_list:
for k,v in value.items():
my_dict_list[k].append(v)
每个值的列表都可以通过以下键进行访问:
print(my_dict_list[50])
答案 1 :(得分:2)
假设您的列表存储为l
,则可以使用zip
在以下位置转置字典值:
list(zip(*(d.values() for d in l)))
这将返回:
[(2, 5, 8), (3, 6, 9), (4, 7, 10)]
答案 2 :(得分:2)
鉴于列表中的所有词典将具有相同的键,则可以使用字典和列表理解:
>>> {k: [d.get(k) for d in my_list_of_dicts] for k in my_list_of_dicts[0]}
{50: [2, 5, 8], 75: [3, 6, 9], 99: [4, 7, 10]}
答案 3 :(得分:2)
Python dict是一个未排序的集合,至少在Python 3.6之前是这样,因此您不能保证键保留插入顺序。并且由于您希望键按数字顺序排列,因此我们需要对它们进行排序。
然后,我们可以使用列表推导从列表中的每个字典中提取相应的值,并使用元组分配将每个列表分配给一个单独的名称。
data = [{50: 2, 75: 3, 99: 4}, {50: 5, 75: 6, 99: 7}, {50: 8, 75: 9, 99:10}]
a, b, c = [[d[k] for d in data] for k in sorted(data[0].keys())]
FWIW,将输出保存为单个列表列表而不是3个单独的列表可能更方便。
答案 4 :(得分:0)
如果您的目标是3个单独的 lists ,则可以使用 list理解力
创建每个 listl = [{50: 2, 75: 3, 99: 4}, {50: 5, 75: 6, 99: 7}, {50: 8, 75: 9, 99:10}]
l_50 = [v for i in l for k, v in i.items() if k == 50] # => [2, 5, 8]
l_75 = [v for i in l for k, v in i.items() if k == 75] # => [3, 6, 9]
l_99 = [v for i in l for k, v in i.items() if k == 99] # => [4, 7, 10]
或者您可以构建一个字典并按key
d = {k: [j[x] for j in l for x in j if x == k] for i in l for k in i}
{50: [2, 5, 8], 75: [3, 6, 9], 99: [4, 7, 10]}