【问题标题】:Store similar keys in list of dictionaries as same column in CSV file将字典列表中的相似键存储为 CSV 文件中的同一列
【发布时间】:2019-03-05 02:38:55
【问题描述】:

假设我有以下字典列表:

citation = [{'ID':'101',
             'SENTENCE':'This is a theory sample from a book.'
             'AUTHOR':'ALEX B.',
             'AUTHOR1':'JOHN K.',
             'TITLE':'BASIC PROGRAMMING',
             'URL':'an.example.com',
             'YEAR':'2010'},
            {'ID':'102',
             'SENTENCE':'This is a theory from book 1 and book 2',
             'AUTHOR':'MARINA E.',
             'TITLE':'BE A GOOD PROGRAMMER',
             'YEAR':'2011',
             'AUTHOR1':'STEVE M.',
             'AUTHOR2':'DIANE L.',
             'TITLE1':'I AM AN ENGINEER',
             'YEAR1':'2013',
             'VOLUME':'10'},
            {.. other data...},
           ]

我需要将此字典列表保存到csv 文件中。如果字典中的键相似(AUTHOR = AUTHOR1 = AUTHOR2, TITLE = TITLE1 = TITLE2 等),则放入列名中没有数字的同一列(AUTHOR, TITLE, YEAR)。如果一列中的数据值多于一个,则应以分号分隔(;)。此外,每个字典中的键名及其顺序有时与列表中的其他字典不同。

这是我的代码,但它不起作用,因为字典中的相似键存储为不同的字段名:

outpath = 'mycitation.csv'
outfile = open(outpath, 'w')

fields = (list(set(k for d in citation for k in d)))
writer = csv.DictWriter(outfile, fieldnames=field, dialect='excel')

writer.writeheader()
for row in citation:
    writer.writerow(row)
outfile.close()

我需要在csv文件中实现的输出:

ID  | SENTENCE                                | AUTHOR                      | TITLE                                  | YEAR       | URL             | VOLUME 
--------------------------------------------------------------------------------------------------------------------------------------------------------------
101 | This is a theory sample from a book.    | ALEX B.;JOHN K.             | BASIC PROGRAMMING                      | 2010       | an.example.com  |
102 | This is a theory from book 1 and book 2 | MARINA E.;STEVE M.;DIANE L. | BE A GOOD PROGRAMMER; I AM AN ENGINEER | 2011; 2013 |                 | 10

【问题讨论】:

    标签: python list csv dictionary


    【解决方案1】:

    您可以使用dict.get() 方法结合字符串格式化。

    for i in citation:
        authors = [i.get("AUTHOR","")]
        titles = [i.get("TITLE","")]
        for x in range(1,10):
            authors.append(i.get("AUTHOR{}".format(x),""))
            titles.append(i.get("TITLE{}".format(x),""))
        a_result,t_result = ";".join(a for a in authors if a),"; ".join(t for t in titles if t)
        print (a_result+"|"+t_result)
    

    结果:

    ALEX B.;JOHN K.|BASIC PROGRAMMING
    MARINA E.;STEVE M.;DIANE L.|BE A GOOD PROGRAMMER; I AM AN ENGINEER
    

    【讨论】:

    猜你喜欢
    • 2016-06-17
    • 2022-06-23
    • 2014-11-19
    • 2021-08-24
    • 2015-12-15
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    相关资源
    最近更新 更多