itemsInExistence = [{'name': 'Tester', 'stats': 1, 'rank': 1, 'amount': 1}, {'name': 'Mk II Death', 'stats': 10, 'rank': 5, 'amount': 3}]
def save_list2():
f = open('all_items.txt', 'w')
ii = 0
for item in itemsInExistence:
print(f.write(itemsInExistence[ii][0], ''))
f.write(itemsInExistence[ii][1] + ' ')
f.write(itemsInExistence[ii][2] + ' ')
f.write(itemsInExistence[ii][3] + '\n')
ii += 1
在说f.write(itemsInExistence [ii] [0],'')的地方,给了我错误
KeyError:0
这是为什么,这是什么意思?有什么办法可以解决这个问题?
答案 0 :(得分:2)
正如@ggorlen所说,将名称用作键。
itemsInExistence = [{'name': 'Tester', 'stats': 1, 'rank': 1, 'amount': 1},
{'name': 'Mk II Death', 'stats': 10, 'rank': 5, 'amount': 3}]
def save_list2():
with open('all_items.txt', 'w') as f:
for item in itemsInExistence:
f.write('{name} {stats} {rank} {amount}\n'.format(**item))
此示例需要Python 3。
编辑:我将print(..., file=f)
更改为f.write(...)
,现在可以在py2和py3中使用了。
EDIT2:一些解释。
with
语句关闭文件automatically。
列表list
或[]
使用正整数索引(0
,1
等)
字典dict
或{}
使用键(在您的示例中,'name'
,'stats'
等)。参见python docs。
for
语句按列表项或dict键进行迭代。您不需要ii
,item
是列表项的内容,即字典。
for item in [1, 4, 'ala']:
print(item)
# prints:
# 1
# 4
# 'ala'
for key in {'anwer': 42, 'sto': 100, 1: 'first'}:
print(key)
# prints:
# 'answer'
# 'sto'
# 1
您可以通过my_dict[key]
访问字典值,也可以通过值for value in my_dict.values
或通过键和值:for key, value in my_dict.items()
进行迭代。
我使用了关键字参数**item
。在函数调用中,func(**{'a': 1, 'b': 2})
的意思是func(a=1, b=2)
。
字符串格式''.format()
(或者自Python 3.6起就是格式字符串f''
)允许使用advanced syntax将数据直接放入字符串。