【问题标题】:Read file to dictionary将文件读入字典
【发布时间】:2015-07-10 22:57:27
【问题描述】:

假设我在下面有一个 CSV 文件,其中包含一些 NFL 球员的数据。我的目标是读取文件,并创建一个字典,其中键作为位置,值作为元组中的玩家资料列表。

(姓名、年龄、身高、体重 - 不包括他们被选中的年份)

我对如何在阅读文件时正确创建字典感到困惑。到目前为止,我所拥有的是最底层的,但它是一团糟。

POSITION,NAME,DRAFTED,AGE,HEIGHT,WEIGHT

QB,Aaron,2005,31,6,225

WR,Jordy,2008,30,6,217

WR,Randall,2011,24,5,192

预期的字典:

dict = {
        QB: [('Aaron', 31, 6, 225)]
        WR: [('Jordy', 30, 6, 217), ('Randall', 24, 5, 192)]
       }
       # Year drafted not included.

我的:

def readTheFile(filename):

    read_it = open(filename, 'r')

    player_dict = {}

    #ignore header row
    readFile = read_it.readlines()[1:]

    for row in readFile:

        k,v = line.split()

        d[int(k)] = v

    return player_dict

【问题讨论】:

    标签: python file dictionary key


    【解决方案1】:

    这是使用csvDictReaderdefaultdict 的解决方案,这是我在简单阅读器上使用的解决方案:

    #!/usr/bin/env python
    import csv
    from collections import defaultdict
    
    with open("players.csv") as f:
        reader = csv.DictReader(f)
        players = list(reader)
    
    # create position -> player mapping
    player_by_position = defaultdict(list)
    for player in players:
        player_by_position[player["POSITION"]].append(tuple(player.values()))
    
    print player_by_position
    

    它包含玩家在值中的位置,但我希望它足够接近 :-) 你也可以让玩家保持原样,通过简单地替换来拥有一个描述它的字典:

    player_by_position[player["POSITION"]].append(tuple(player.values()))
    

    与:

    player_by_position[player["POSITION"]].append(player)
    

    或者,您可以使用简单的阅读器通过迭代来获得准确的输出:

    #!/usr/bin/env python
    import csv
    from collections import defaultdict
    
    player_by_position = defaultdict(list)
    
    with open("players.csv") as f:
        reader = csv.reader(f)
        for row in reader:
            player_by_position[row[0]].append(tuple(row[1:])
    
    print player_by_position
    

    编辑 - 没有导入:

    #!/usr/bin/env python
    
    player_by_position = {}
    
    with open("players.csv") as f:
        # skip headers
        f.readline()
        for line in f:
            values = line.strip().split(",")
            if not values[0] in player_by_position:
                # new position - create new list of players for it
                player_by_position[values[0]] = []
    
            player_by_position[values[0]].append(tuple(values[1:]))
    
    print player_by_position
    

    【讨论】:

    • 不导入任何东西能达到目的吗?
    • 谢谢,我去看看。
    猜你喜欢
    • 2010-09-25
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多