python - 将列组织和排序到字典变量中
问题描述
我有一个包含多列的 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}}
我哪里错了?
解决方案
我不清楚您想要实现什么,但我看到您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'}
推荐阅读
- c# - 模型绑定返回 NULL
- python - 将单元格值转换为列标题,如果在 python 中匹配,则用 1 填充
- r - 在 R 中,将 Wide 数据帧转换为 Long,同时保留一些信息
- php - PHP 返回 NULL 使用 Tensorflow 运行 Python 脚本
- python - PKCS11 是否总是以相同的顺序查找对象?
- sql - sql server中如何知道Symmetrickey的值
- visual-studio-2010 - 将所有控件缩放到窗口大小
- android - 无法解析符号“ACCESS_BACKGROUND_LOCATION”
- java - DynamoDB(Java)中基于数字限制和偏移的分页
- azure-devops - 托管在 Gitlab 上的来自 Yaml 的 Azure 管道