【问题标题】:Organizing & sorting columns into dictionary variable将列组织和排序到字典变量中
【发布时间】:2020-01-09 15:00:57
【问题描述】:

我有一个包含多列的 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}}

我哪里错了?

【问题讨论】:

  • for user_id, team in zip(list(stats.keys()), [stats[user]['TEAM'] for user in list(stats.entries())]): print(user_id,team) current_teams = {team:{'members':members.append(user_id)}} 打印什么?
  • 你能不能也添加一个stats的打印?

标签: python list csv dictionary


【解决方案1】:

实际上,最简单、最 Pythonic 的方式就是一直盯着我看!您不需要导入其他模块(csv 除外)。只需这样做:

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 = {}
for user_id in list(stats.keys()): 
    if stats[user_id]['TEAM'] in current_campaign: current_campaign[stats[user_id]['TEAM']]['USER'].append(user_id)
    else: 
        current_campaign.update({stats[user_id]['TEAM']:{'USER':[]}})
        current_campaign[stats[user_id]['TEAM']]['USER'].append(user_id)

【讨论】:

    【解决方案2】:

    您可以使用以下代码。我使用了txt 文件而不是csv。您可以使用csv Python 模块读取csv 文件。也许这个网站可以提供帮助:https://realpython.com/python-csv/

    test.txt

    UKW1G1KK8   TFCARKGN5
    
    UL3DTLGRE   TFCARKGN5
    
    UL2HHLQRY   TFCARKGN5
    
    ULTM136EB   TFCARKGN5
    
    UFD51MS69   TFCARKGN6
    
    UKM4K5DJR   TFCARKGN6
    
    UMS5G3PEH   TFCARKGN6
    
    UL7RL2X5E   TFCARKGN6
    
    UMP69CC69   TFCARKGN6
    

    代码:

    result_dict = {}
    with open('test.txt') as f:
        for data in f.readlines():
            data = data.strip()
            if not data:
                continue
            if data.split()[1] in result_dict:
                result_dict[data.split()[1]].append(data.split()[0])
                continue
            result_dict[data.split()[1]] = [data.split()[0]]
    print(result_dict)
    

    输出:

    >>> python3 test.py 
    {'TFCARKGN5': ['UKW1G1KK8', 'UL3DTLGRE', 'UL2HHLQRY', 'ULTM136EB'], 'TFCARKGN6': ['UFD51MS69', 'UKM4K5DJR', 'UMS5G3PEH', 'UL7RL2X5E', 'UMP69CC69']}
    

    【讨论】:

      【解决方案3】:

      我不清楚你想要实现什么,但我看到你使用members.append(user_id) 作为你的字典中的值,但.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'}
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-19
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 2021-04-22
      • 2018-10-27
      • 1970-01-01
      相关资源
      最近更新 更多