我正在尝试将字典传递到循环之外,其中包含所有结果。可能吗?
我的代码:
file_name = input('Enter a file name: ')
f = open(file_name, 'r')
data = f.readlines()
final_data = []
for line in data:
values = line.split()
read_line = dict({
'vertex': values[0],
'visited': values[1],
'letter': values[2],
'neighbors': values[3]
})
final_data.append(read_line)
print(final_data['vertex'])
错误 TypeError:list indices必须是整数,而不是str
显示错误的原因是它已将dict转换为列表。现在,当我使用.copy()将dict复制到final_data时,它只打印文件中的第一行。我想以某种方式复制整个字典,因为我需要在代码中稍后访问不同的key =>值。
我的输入文件
1 0 A 2,3 // 1 = vertex || 0 = visited || A = letter || 2,3 = neighbors
2 0 B 1,4,5
3 0 C 1,2
4 0 D 2,5
5 0 E 2,4
我知道列表只占用整数但我需要以某种方式使用dict。
答案 0 :(得分:2)
你有一个列表的词典(你不断为文件中的每一行添加它),而不是单个词典。因此
print final_data[0]['vertex']
应该可以工作并显示第一行的顶点。如果你想打印所有这些,你可以做类似的事情:
print [ d['vertex'] for d in final_data ]
或遍历final_data列表:
for d in final_data:
print d['vertex'] + '\n'
答案 1 :(得分:1)
您尝试将final_data
作为字典访问,但是您将其声明为带有[]
表示法的列表。您需要以类似列表的方式访问它,或者当您将read_line
字词添加到final_data
字典时,而不是需要提供可以查找它们的密钥
答案 2 :(得分:1)
首先,你可以做得更整洁:
final_data = []
fields = ["vertex", "visited", "letter", "neighbours"]
with open(file_name, 'r') as f:
for line in f:
final_data.append(dict(zip(fields, line.strip().split(' ')))
其次,您的final_data
是一个词典列表,列表中的每个词典都包含文件中一行的内容:
final_data = [{"vertex": "1", "visited": "0",
"letter": "A", "neighbours": "2,3"},
{...},
...]
因此,要获取第一个项目的顶点,您需要将列表和键索引为字典:
final_data[0]["vertex"]
答案 3 :(得分:0)
如何将字典键设置为顶点值?
final_data = dict()
for line in data:
values = line.split()
read_line = dict({
'visited': values[1],
'letter': values[2],
'neighbors': values[3]
})
final_data[values[0]] = read_line
print(final_data[1])