首页 > 解决方案 > 将列组织和排序到字典变量中

问题描述

我有一个包含多列的 stats.csv 文件,其中前 2 列是(注意:我没有包括表的其余部分,因为它包含机密数据):

USER        TEAM

UKW1G1KK8   TFCARKGN5

UL3DTLGRE   TFCARKGN5

UL2HHLQRY   TFCARKGN5

ULTM136EB   TFCARKGN5

UFD51MS69   TFCARKGN6

UKM4K5DJR   TFCARKGN6

UMS5G3PEH   TFCARKGN6

UL7RL2X5E   TFCARKGN6

UMP69CC69   TFCARKGN6

我希望创建一个这样的字典:current_teams = {team: [users]}.

在上面的例子中,它将是

current_teams = {TFCARKGN5:[UKW1G1KK8,UL3DTLGRE,UL2HHLQRY,ULTM136EB],  TFCARKGN6:[UFD51MS69,UKM4K5DJR,UMS5G3PEH,UL7RL2X5E,UMP69CC69]}

我写了这个

import csv
stats = {}
with open('Data/stats.csv', mode='r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for row in csv_reader: stats.update({row['USER']: row})

current_teams = {}
members = []
for user_id, team in zip(list(stats.keys()), [stats[user]['TEAM'] for user in list(stats.keys())]):
    current_teams = {team:{'members':members.append(user_id)}}

但我得到的输出是这样的:{'TFCARKGN5': {'members': None}}

我哪里错了?

标签: pythonlistcsvdictionary

解决方案


我不清楚您想要实现什么,但我看到您members.append(user_id)在 dict 中用作值,但.append()不返回值。

我认为这段代码实现了您正在寻找的分组(我将其作为文本文件阅读,但csv如果您愿意,也可以使用该模块):

import collections
teams = collections.defaultdict(set)

with open('test.txt') as f:
    for i, line in enumerate(f):
        if i == 0:
            # skip first line
            continue

        line = line.strip()
        if len(line) > 0:
            user, team = line.split(',')
            teams[team].add(user)

print(teams)
for t, user_set in teams.items():
    print(t, user_set)

输出是:

defaultdict(<class 'set'>, {'TFCARKGN5': {'ULTM136EB', 'UKW1G1KK8', 'UL3DTLGRE', 'UL2HHLQRY'}, 'TFCARKGN6': {'UFD51MS69', 'UMS5G3PEH', 'UKM4K5DJR', 'UMP69CC69', 'UL7RL2X5E'}})
TFCARKGN5 {'ULTM136EB', 'UKW1G1KK8', 'UL3DTLGRE', 'UL2HHLQRY'}
TFCARKGN6 {'UFD51MS69', 'UMS5G3PEH', 'UKM4K5DJR', 'UMP69CC69', 'UL7RL2X5E'}

推荐阅读