如何从python中的字符串列表创建字典或json?

时间:2020-05-18 18:57:51

标签: python string

我正在尝试从字符串列表创建字典或json,这将是字典的值,并且我有字典键将成为匹配值。我认为完成此操作很直观,但是出现以下错误:

> Traceback (most recent call last):
>     output[elm].append(k) TypeError: list indices must be integers or slices, not str

我很好奇是什么引起了这个问题。谁能指出我的代码出了什么问题?

我的尝试

这是我的代码:

更新

lst = {api, 1,0,0}
mystring = lst.split(",")

mystring = ['api', '1', '0', '0']
names = {'name', 'mayor', 'minor', 'patch'}

output =[]
for elm in range(len(names)):
    for k in range(len(mystring)):
        output[elm].append(k)

print(output)

如何解决该错误?有没有一种有效的方法可以从字符串列表制作字典或json,而无需使用嵌套的for循环?有更好的主意吗?

所需的输出

我想获取字典或json这样的内容:

{
  "mayor": 1,
  "minor": 0,
  "name": "api",
  "patch": 0
}

很抱歉,如果我的编码缺陷很小,我无法找到问题的根源。谢谢

2 个答案:

答案 0 :(得分:1)

整齐的单线:

my_string = ['api', '1', '0', '0']
names = ['name', 'mayor', 'minor', 'patch']

output = {names[i]: my_string[i] for i in range(len(my_string))}
print(output)

这应该给出:

{'name': 'api', 'mayor': '1', 'minor': '0', 'patch': '0'}

请注意,您的变量names不再是集合;没有必要设置一个。另外,如果有一个集合,则代码将无法工作,因为集合不可下标。

您的代码中有很多错误: 在这里,您声明的是列表,而不是字典:

output =[]

在这里,您要遍历集合和列表的长度,您必须遍历它们:

for elm in range(len(names)):
    for k in range(len(mystring)):

答案 1 :(得分:1)

使用内置的zip函数。 Zip适用于列表,因此您需要先将其转换为列表。当然,依赖集合中的顺序不是一个好主意,因此最好将两个列表都创建为列表

mystring = ['api', '1', '0', '0']
names = {'name', 'mayor', 'minor', 'patch'}
output = zip(list(names),mystring)
print(dict(output))

或使用两个列表作为输入

mystring = ['api', '1', '0', '0']
names = ['name', 'mayor', 'minor', 'patch']
output = zip(names, mystring)
print(dict(output))

两幅画

{'name': 'api', 'patch': '1', 'mayor': '0', 'minor': '0'}

当然,如果您希望数字是数字而不是字符串,请确保在传递给zip的列表中数字的类型正确:

mystring = ['api', 1, 0, 0]
names = {'name', 'mayor', 'minor', 'patch'}
output = zip(list(names),mystring)
print(dict(output))

打印

{'patch': 'api', 'minor': 1, 'mayor': 0, 'name': 0}