我正在尝试从字符串列表创建字典或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
}
很抱歉,如果我的编码缺陷很小,我无法找到问题的根源。谢谢
答案 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}