Python:如何以编程方式创建数组字典

时间:2018-08-17 17:49:03

标签: python arrays dictionary

我有一个数组a,我想在编程创建键的同时将每5个值存储在字典中。

例如:

如果有

a=[1,2,3,4,5,6,7,8,9,10]

我希望字典看起来像这样:

d={"first_title":[1,2,3,4,5], "second_title":[6,7,8,9,10]}

编辑:我有成千上万的术语,所以我想循环进行

3 个答案:

答案 0 :(得分:3)

字典值可以是任何对象,包括数组。因此,您只需从一个空的dict开始,然后向其中添加数组值即可。

my_dict = {}
year = 1984
for index in range(0, len(a), 5):
    my_dict[year] = a[index: index+5]
    year += 1

答案 1 :(得分:2)

以下是一些通用的Python解决方案:

from itertools import izip_longest


def grouper(n, iterable, fillvalue=None):
    """grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"""
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

keys = ["first-title", "second-title"]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

result = {key: list(group) for key, group in zip(keys, grouper(5, a))}

这使用了石斑鱼食谱(有关详细说明,请参见此answer)。较少使用pythonic的解决方案是使用for循环迭代键和组对:

result = {}
for key, group in zip(keys, grouper(5, a)):
    result[key] = group

在两种情况下,输出均为:

{'first-title': [1, 2, 3, 4, 5], 'second-title': [6, 7, 8, 9, 10]}

答案 2 :(得分:2)

怎么样?

输入:

total_child

代码:

a = [1,2,3,4,5,6,7,8,9,10]
keys = [1984, 1985, 1986, 1987] 
n = 5

输出:

my_dict = {}

for i in range(len(a)//n):
    key = str(keys[i]) if i < len(keys) else "after " + str(keys[-1])
    my_dict[key] = a[i*n: (i+1)*n]

print(my_dict)

根据您的用例,您还可以执行以下操作:

{'1984': [1, 2, 3, 4, 5], '1985': [6, 7, 8, 9, 10]}