Python:如何以编程方式创建数组字典
我有一个数组Python:如何以编程方式创建数组字典,python,arrays,dictionary,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]} # Input a = range(22) keys = [1984, 1985, 1986] # maybe replace it with range(1984, 2000) n = 5 # Code b
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]}
# Input
a = range(22)
keys = [1984, 1985, 1986] # maybe replace it with range(1984, 2000)
n = 5
# Code
b = a
my_dict = {}
for i in range(min(len(keys), len(a)//n)):
key = keys[min(i, len(keys)-1)]
my_dict[key] = b[:n]
b = b[n:]
my_dict['later'] = b
print(my_dict)
# Output
{
1984: [0, 1, 2, 3, 4],
1985: [5, 6, 7, 8, 9],
1986: [10, 11, 12, 13, 14],
'later': [15, 16, 17, 18, 19, 20, 21]
}
编辑:我有数千个术语,所以我想在循环中执行此操作字典值可以是任何对象,包括数组。因此,您只需从一个空dict开始,并向其中添加数组值
my_dict = {}
year = 1984
for index in range(0, len(a), 5):
my_dict[year] = a[index: index+5]
year += 1
下面是一个比较通用的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))}
这使用了石斑鱼的配方(请参阅此以获得更好的解释)。一个不太像Python的解决方案是使用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]}
这个怎么样
输入:
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]}
代码:
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]}
根据您的用例,您还可以执行以下操作:
d={"first_title":[1,2,3,4,5], "second_title":[6,7,8,9,10]}
# Input
a = range(22)
keys = [1984, 1985, 1986] # maybe replace it with range(1984, 2000)
n = 5
# Code
b = a
my_dict = {}
for i in range(min(len(keys), len(a)//n)):
key = keys[min(i, len(keys)-1)]
my_dict[key] = b[:n]
b = b[n:]
my_dict['later'] = b
print(my_dict)
# Output
{
1984: [0, 1, 2, 3, 4],
1985: [5, 6, 7, 8, 9],
1986: [10, 11, 12, 13, 14],
'later': [15, 16, 17, 18, 19, 20, 21]
}
如何设想“以编程方式创建键”a是一个列表,而不是一个数组。在许多其他问题和其他帮助站点中,都会处理切片成常规块的问题。你在这一部分的什么地方卡住了?你例子中的
d
不是字典,它使用了非法的符号。我有数千个术语,所以我想以某种循环的方式来做这件事。我希望密钥是一年。例如1984年、1985年等。如果您希望密钥为年,为什么不在问题中这样说?@您的答案的当前修订版:您在错误的假设下编写了它,即数组包含条目[1,2,…n],因此您将其替换为范围(n)
。op说他有一个[arbitary]数组,所以我们可以假设这些数字只是一个例子…@FabianN.:Edited稍微偏离主题,但是:+1对于使用dict理解,我甚至不知道这是可能的。