是否有可能将循环外的完整字典传递给另一个字典

时间:2014-01-21 19:29:38

标签: python

我正在尝试将字典传递到循环之外,其中包含所有结果。可能吗?

我的代码:

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。

4 个答案:

答案 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])