Python 如何在循环中创建并向字典添加新项?

Python 如何在循环中创建并向字典添加新项?,python,arrays,dictionary,Python,Arrays,Dictionary,我正在编写一个程序,从文件中读取与这些名称相关的名称和统计信息。文件的每一行都是另一个人及其统计信息。对于每个人,我想让他们的姓氏成为一个键,以及字典中与该键相关的所有内容。程序首先将文件中的数据存储在一个数组中,然后我尝试将这些数组元素放入字典中,但我不确定如何做到这一点。另外,我不确定是否每次for循环迭代时,它都会覆盖字典以前的内容。下面是我尝试使用的代码: f = open("people.in", "r") tmp = None people l = f.readline() wh

我正在编写一个程序,从文件中读取与这些名称相关的名称和统计信息。文件的每一行都是另一个人及其统计信息。对于每个人,我想让他们的姓氏成为一个键,以及字典中与该键相关的所有内容。程序首先将文件中的数据存储在一个数组中,然后我尝试将这些数组元素放入字典中,但我不确定如何做到这一点。另外,我不确定是否每次for循环迭代时,它都会覆盖字典以前的内容。下面是我尝试使用的代码:

f = open("people.in", "r")

tmp = None
people

l = f.readline()
while l:
        tmp  = l.split(',')
        print tmp
        people = {tmp[2] : tmp[0])
        l = f.readline()

people['Smith']
我目前遇到的错误是语法不正确,但是除了这样,我不知道如何将数组元素转移到字典中

使用密钥分配:

people = {}

for line in f:
    tmp = l.rstrip('\n').split(',')
    people[tmp[2]] = tmp[0]
这将直接循环文件对象,无需在此处调用
.readline()
,并删除换行符

您似乎有CSV数据;您也可以在此处使用
csv
模块:

import csv

people = {}

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        people[row[2]] = row[0]
甚至是听写理解:

import csv

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    people = {r[2]: r[0] for r in reader}
这里的
csv
模块负责分割和删除换行符

语法错误源于尝试用
而不是
}
关闭打开的
{

people = {tmp[2] : tmp[0])  # should be }
如果需要收集每个
行[2]
值的多个条目,请在列表中收集这些条目;a使之更容易:

import csv
from collections import defaultdict

people = defaultdict(list)

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        people[row[2]].append(row[0])
使用密钥分配:

people = {}

for line in f:
    tmp = l.rstrip('\n').split(',')
    people[tmp[2]] = tmp[0]
这将直接循环文件对象,无需在此处调用
.readline()
,并删除换行符

您似乎有CSV数据;您也可以在此处使用
csv
模块:

import csv

people = {}

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        people[row[2]] = row[0]
甚至是听写理解:

import csv

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    people = {r[2]: r[0] for r in reader}
这里的
csv
模块负责分割和删除换行符

语法错误源于尝试用
而不是
}
关闭打开的
{

people = {tmp[2] : tmp[0])  # should be }
如果需要收集每个
行[2]
值的多个条目,请在列表中收集这些条目;a使之更容易:

import csv
from collections import defaultdict

people = defaultdict(list)

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        people[row[2]].append(row[0])
使用密钥分配:

people = {}

for line in f:
    tmp = l.rstrip('\n').split(',')
    people[tmp[2]] = tmp[0]
这将直接循环文件对象,无需在此处调用
.readline()
,并删除换行符

您似乎有CSV数据;您也可以在此处使用
csv
模块:

import csv

people = {}

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        people[row[2]] = row[0]
甚至是听写理解:

import csv

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    people = {r[2]: r[0] for r in reader}
这里的
csv
模块负责分割和删除换行符

语法错误源于尝试用
而不是
}
关闭打开的
{

people = {tmp[2] : tmp[0])  # should be }
如果需要收集每个
行[2]
值的多个条目,请在列表中收集这些条目;a使之更容易:

import csv
from collections import defaultdict

people = defaultdict(list)

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        people[row[2]].append(row[0])
使用密钥分配:

people = {}

for line in f:
    tmp = l.rstrip('\n').split(',')
    people[tmp[2]] = tmp[0]
这将直接循环文件对象,无需在此处调用
.readline()
,并删除换行符

您似乎有CSV数据;您也可以在此处使用
csv
模块:

import csv

people = {}

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        people[row[2]] = row[0]
甚至是听写理解:

import csv

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    people = {r[2]: r[0] for r in reader}
这里的
csv
模块负责分割和删除换行符

语法错误源于尝试用
而不是
}
关闭打开的
{

people = {tmp[2] : tmp[0])  # should be }
如果需要收集每个
行[2]
值的多个条目,请在列表中收集这些条目;a使之更容易:

import csv
from collections import defaultdict

people = defaultdict(list)

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        people[row[2]].append(row[0])

根据上面Generalkidd的评论,多人在Martijn Pieter的解决方案中添加了相同的最后一次,作为更好格式的答案发布:

import csv

people = {}

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        if not row[2] in people:
            people[row[2]] = list()
        people[row[2]].append(row[0])

根据上面Generalkidd的评论,多人在Martijn Pieter的解决方案中添加了相同的最后一次,作为更好格式的答案发布:

import csv

people = {}

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        if not row[2] in people:
            people[row[2]] = list()
        people[row[2]].append(row[0])

根据上面Generalkidd的评论,多人在Martijn Pieter的解决方案中添加了相同的最后一次,作为更好格式的答案发布:

import csv

people = {}

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        if not row[2] in people:
            people[row[2]] = list()
        people[row[2]].append(row[0])

根据上面Generalkidd的评论,多人在Martijn Pieter的解决方案中添加了相同的最后一次,作为更好格式的答案发布:

import csv

people = {}

with open("people.in", "rb") as f:
    reader = csv.reader(f)
    for row in reader:
        if not row[2] in people:
            people[row[2]] = list()
        people[row[2]].append(row[0])

由此产生的唯一语法错误是,如果将制表符与空格混合(或者如果使用python3,
print
语句),那么缩进会导致代码出现错误,但从语义上讲,代码毫无意义。。。您可能应该阅读官方的python教程来获得对该语言的基本理解。@l4mpi:语法不正确;字典没有正确关闭。@MartijnPieters哦,对了。在代码的所有其他问题中,我忽略了这一点……由此产生的唯一语法错误是,如果您将制表符与空格混合(或者如果您使用python3,即
print
语句),则会出现缩进,但从语义上讲,代码毫无意义。。。您可能应该阅读官方的python教程来获得对该语言的基本理解。@l4mpi:语法不正确;字典没有正确关闭。@MartijnPieters哦,对了。在代码的所有其他问题中,我忽略了这一点……由此产生的唯一语法错误是,如果您将制表符与空格混合(或者如果您使用python3,即
print
语句),则会出现缩进,但从语义上讲,代码毫无意义。。。您可能应该阅读官方的python教程来获得对该语言的基本理解。@l4mpi:语法不正确;字典没有正确关闭。@MartijnPieters哦,对了。在代码的所有其他问题中,我忽略了这一点……由此产生的唯一语法错误是,如果您将制表符与空格混合(或者如果您使用python3,即
print
语句),则会出现缩进,但从语义上讲,代码毫无意义。。。您可能应该阅读官方的python教程来获得对该语言的基本理解。@l4mpi:语法不正确;字典没有正确关闭。@MartijnPieters哦,对了。在代码的所有其他问题中,我都忽略了这一点……代码现在可以工作了,但看起来