【问题标题】:Python: how to programmatically create a dictionary of arrays [closed]Python:如何以编程方式创建数组字典 [关闭]
【发布时间】:2019-01-24 19:19:50
【问题描述】:

我有一个数组 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]}

编辑:我有数千个术语,所以我想循环执行此操作

【问题讨论】:

  • 您如何设想“以编程方式创建密钥”?
  • a 是一个列表,而不是一个数组。在许多其他问题和其他帮助站点中处理切片成常规块。你在哪里卡住了?
  • 您示例中的d 不是字典,它使用了非法符号。

标签: python arrays dictionary


【解决方案1】:

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

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

【讨论】:

  • 我有数千个术语,所以我想在某种类型的循环中这样做
  • 我希望密钥为一年。如1984、1985等
  • 如果你希望key是年,你为什么不在问题中这么说呢?
  • @当前版本的答案:您错误地假设数组包含条目 [1,2,...n],因此您将其替换为 range(n)。操作员说他有一个 [任意] 数组,因此可以假设这些数字只是一个示例......
  • @FabianN.:edited
【解决方案2】:

这个怎么样?

输入:

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

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

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

【讨论】:

    【解决方案3】:

    一个有点通用和pythonic的解决方案如下:

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

    【讨论】:

    • 有点题外话,但是:+1 用于使用字典理解,我什至不知道这是可能的。
    猜你喜欢
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2013-07-13
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多