我在python中循环时如何添加字典项

时间:2015-10-18 22:20:47

标签: python loops dictionary

我是python中的初学者,我正在尝试从python中的eml文件解析信息。我设置了extract函数来解析我想要的内容。问题是我有10,000多个文件,我不知道如何将每个提取的信息添加到一个对象。

当我在一个eml文件上运行extract函数时,输出看起来像

{'from': 'Joe', 'to': 'Robert', 'text': 'Hey Robert'}

输出是dict个对象。现在,我想将提取的输出附加到我现有的输出(name),以收集name中10,000个文件中的每个信息。我怎样才能做到这一点?我使用了以下代码,但name对象仅包含FList中最后一个文件的信息(每10,000个文件的列表)。

for i in range(len(FList)):
  f = open(FList[i])
  name=extract(f, f.name)
  f.close()

3 个答案:

答案 0 :(得分:1)

看起来您想要使用文件中的数据将文件名映射到字典。要做到这一点,你会做类似的事情:

file_map = {}
for fname in FList:
    with open(fname) as f:
        file_map[fname] = extract(f, fname)

答案 1 :(得分:0)

您的循环中正在覆盖name对象。由于名称是dict,并且dicts通过引用传递(谷歌通过引用传递获取更多信息),你可以这样做:

names = dict()
for my_file in file_lst:
    with open(my_file) as f:
        extract(f,names)

def extract(f, names):
    #modify your names dict here such as:
    names["something new"] = "a new value"

完成对file_lst的循环后,您将使用所有文件中的所有信息填充名称,因为它将在整个循环中保留...

答案 2 :(得分:0)

这完全取决于您希望如何存储数据。如果您只想要一个条目列表,那么您只需要将提取的数据附加到列表中,如下所示:

name = []

for file_name in FList:
    with open(file_name) as f:
        name.append(extract(f, f.name))

extract()中,您可以添加另一个字典条目以保留条目的文件名,然后再返回。