如何在Python中分割字典数组?

时间:2018-10-03 01:08:51

标签: python dictionary

[{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. 

5 个答案:

答案 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理解力

创建每个 list
l = [{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]}