【问题标题】:how to assign keys and values to a dictionary using loops in python?如何使用python中的循环将键和值分配给字典?
【发布时间】:2019-03-12 08:01:36
【问题描述】:

我的密码:

a = ['name1 2 3 4', 'name2 5 6 7']
dicto = {}
i = 0
while (i < 2):
    dicto[a[i][:(a[i].find(''))]] = a[i][a[i].find('') + 1:]
    i += 1
print(dicto)

期望的输出:

{'name1':'2 3 4','name2':'5,6,7'}

我的输出:

{'': 'ame2 5 6 7'}

【问题讨论】:

  • 您正在搜索空字符串 (''),但您应该搜索空格 (' ')

标签: python python-3.x loops dictionary runtime-error


【解决方案1】:

您可以使用带有str.split()的以下生成器表达式的dict构造函数:

dict(s.split(maxsplit=1) for s in a)

这会返回:

{'name1': '2 3 4', 'name2': '5 6 7'}

【讨论】:

  • 哦,谢谢!但我刚刚进入 python,我不知道什么是 dict 构造函数。
  • 这是使用一系列键值元组来构造带有dict()构造函数的字典。具体可以参考dict构造函数的documentation
【解决方案2】:

如果我们在a 的每个子列表上使用.split(),我们将得到

a = [['name1', '2', '3', '4'], ['name2', '5', '6', '7']]

现在我们可以决定使用.split()0 索引作为name 作为我们的key 和剩余的切片[1:] 作为我们的值。为此,我们可以使用传统的循环

dicta = {}
for i in a:
    dicta[i.split()[0]] = i.split()[1:]
# {'name1': ['2', '3', '4'], 'name2': ['5', '6', '7']}

这可以使用字典理解来缩短

dicta = {i.split()[0]: i.split()[1:] for i in a}

【讨论】:

  • 你分裂了两次,看起来很脏
【解决方案3】:

您可以将字典推导与序列解包一起使用:

a = ['name1 2 3 4', 'name2 5 6 7']

res = {k: ' '.join(v) for k, *v in map(str.split, a)}

print(res)

{'name1': '2 3 4', 'name2': '5 6 7'}

【讨论】:

    猜你喜欢
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2021-11-12
    相关资源
    最近更新 更多