【问题标题】:Dynamically append sliced list items to a dictionary in python将切片列表项动态附加到python中的字典
【发布时间】:2018-12-18 21:19:01
【问题描述】:

我有一个带有预定义键的结果字典,应该根据数组的切片填充而不显式访问字典键,下面是我的方法的一个示例

my_list = ['a','b','c','d','e']
my_dict = {'first_item':'', 'middle_items':'','last_item':''}

for key in my_dict.keys():
    value = my_list.pop()
    my_dict.update({k:''.join(value)})

这种方法显然行不通,因为 pop 不会对数组进行切片。如果我想使用切片,我将不得不显式访问字典变量并分配相应的列表切片。

我曾尝试使用列表长度对列表进行切片,但无法找到通用解决方案,这是我的另一种方法

for key in my_dict.keys():
    value = ''.join(my_list[:-len(my_list)+1])
    del my_list[0]
    my_dict.update({k:v})

如何以一般方式对列表进行切片,以便将其拆分为第一项、最后一项和中间项?下面是更新后的字典应该是什么样子的

my_dict = {'first_item':'a', 'middle_items':'b c d','last_item':'e'}

编辑:如果我使用 [0]、[1:-1] 和 [-1] 切片,那么这意味着我必须单独访问每个字典键并更新它,而不是循环遍历它(这是所需的方法)

【问题讨论】:

  • 使用索引 [0]、[1:-1]、[-1] 使其通用
  • 使用循环是什么意思?您有三种情况,它们似乎都有不同的逻辑,没有理由使用循环。

标签: python python-3.x list dictionary slice


【解决方案1】:

如果你使用的是 python 3,那么你应该试试这个成语:

my_list = ['a','b','c','d','e']
first_item, *middle_items, last_item = my_list

my_dict = dict(
    first_item=first_item,
    middle_items=' '.join(middle_items),
    last_item=last_item
)
print(my_dict)
# {'last_item': 'e', 'middle_items': 'b c d', 'first_item': 'a'}

【讨论】:

  • 谢谢!稍微修改您的答案帮助我找到了解决方案,我设法通过扩展解压列表项并将新列表压缩到字典键来附加字典。 (对于关心我为什么要采用这种方法的任何人,这是因为我正在从通用配置文件中读取 dict,并且我不想在我的代码中硬编码 dict 键)
【解决方案2】:

要获取my_list 的一部分,请使用slice notation

my_list = ['a', 'b', 'c', 'd', 'e']

my_dict = {
    'first_item': my_list[0],
    'middle_items': ' '.join(my_list[1:-1]),
    'last_item': my_list[-1]
}

输出

{'first_item': 'a',
 'middle_items': 'b c d',
 'last_item': 'e'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2020-12-06
    • 2023-02-02
    • 2013-03-27
    • 2019-03-29
    • 2019-11-07
    • 2015-08-22
    相关资源
    最近更新 更多