【问题标题】:How to extract from dictionaries to only print certain variables python如何从字典中提取仅打印某些变量python
【发布时间】:2017-06-10 20:37:09
【问题描述】:

我有一个这样的 tsv 文件

Name    School   Course         
Nicole  UVA      Biology
Jenna   GWU      CS

从那里, 我只想从该字典中打印名称和课程。我该怎么办?

下面的代码是我如何将原始 TSV 文件放入上面的字典中的。

import csv
data = csv.reader(open('data.tsv'),delimiter='\t')
fields = data.next()
for row in data:
    item = dict(zip(fields, row))
    print item 

所以现在我得到了这样的字典:

{'Name':'Nicole.', 'School':'UVA.','Course':'Biology'}
{'Name':'Jenna.', 'School':'GWU','Course':'CS'}
{'Name':'Shan', 'School':'Columbia','Course':'Astronomy'}
{'Name':'BILL', 'School':'UMD.','Course':'Algebra'}

我只想打印该字典中的名称和课程。我该怎么办?

我想添加代码以便只打印

{'Name':'Jenna.','Course':'CS'}
{'Name':'Shan','Course':'Astronomy'}
{'Name':'BILL','Course':'Algebra'}

请指导。谢谢你

【问题讨论】:

    标签: python


    【解决方案1】:

    只需删除循环中的键

    for row in data:
        item = dict(zip(fields, row))
        del item['School']
        print item 
    

    【讨论】:

    • 对于这个,del 项中可以有其他变量吗?就像我可以做 del item['School','Name'] 因为我试过了,但它不让我。
    • 你会这样做:del item['School'] del item['Name'] 在单独的行上
    【解决方案2】:

    最简单的方法是在打印之前删除item['School'] 条目

    for row in data:
        item = dict(zip(fields, row))
        del item['School']
        print item 
    

    但这只有在您确切知道字典长什么样、没有您不想要的其他条目并且已经有 School 条目的情况下才有效。相反,我建议您从旧字典中构建一个新字典,只保留 NameCourse 条目

    for row in data:
        item = dict(zip(fields, row))
        item = {k, v for k, v in item.items() if k in ('Name', 'Course')}
        print item 
    

    【讨论】:

      【解决方案3】:

      可能首先使用DictReader,并且仅当键与预定义列表匹配时才重建行字典:

      import csv
      
      keep = {"Name","Course"}
      data = csv.DictReader(open('data.tsv'),delimiter='\t')
      
      for row in data:
          row = {k:v for k,v in row.items() if k in keep}
          print(row)
      

      结果:

      {'Course': 'Biology', 'Name': 'Nicole'}
      {'Course': 'CS', 'Name': 'Jenna'}
      

      【讨论】:

        【解决方案4】:

        根据这里的答案: filter items in a python dictionary where keys contain a specific string

        print {k:v for k,v in item.iteritems() if "Name" in k or "Course" in k}
        

        【讨论】:

          【解决方案5】:

          您最好使用专为此类任务设计的库 (Pandas)。字典非常适​​合存储键值对,但看起来您拥有类似电子表格的表格数据,因此您应该选择更好地反映手头数据的存储类型。您可以简单地执行以下操作:

          import pandas as pd
          
          df = pd.read_csv('myFile.csv', sep = '\t')
          
          print df[['Name','Course']]
          

          您会发现,当您开始执行更复杂的任务时,最好使用编写良好的库而不是将某些东西拼凑在一起

          【讨论】:

            【解决方案6】:

            用下面的行替换你的“print(item)”行。

            print(dict(filter(lambda e: e[0]!='School', item)))
            

            输出:

            {'Name':'Jenna.','Course':'CS'}
            {'Name':'Shan','Course':'Astronomy'}
            {'Name':'BILL','Course':'Algebra'}
            

            【讨论】:

              猜你喜欢
              • 2020-12-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多