首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不存在密钥,则保留字典的初始化值

如果不存在密钥,则保留字典的初始化值
EN

Stack Overflow用户
提问于 2016-08-17 17:50:35
回答 3查看 46关注 0票数 0

我正在尝试解析pdf元数据,如下所示:

代码语言:javascript
复制
    fields = ["Author", "Year",  "Journal", "Title", "Publisher",
                   "Page", "Address", "Annote", "Booktitle", "Chapter",
                   "Crossred", "Edition", "Editor", "HowPublished",
                   "Institution", "Month", "Note", "Number",
                   "Organization", "Pages", "School",
                   "Series", "Type", "Volume", "Doi", "File"]
    op=pexif.get_json(filename)
    new_op = {"Author":"Unknown"}
    print(new_op)
    new_op = {
        field: str(value) for field in fields
        for key, value in op[0].items() if field.lower() in key.lower()
    }
    print(new_op)
    id_auth=new_op["Author"].split()[-1]
    id_tit = (new_op["Title"].split()[:2])

在少数情况下,Author标签不存在,所以我用Unknown初始化了它,希望如果找不到Author标签,该值将保持不变。但是,在new_op ={}中,它会覆盖旧数据。因此,对于两个print(new_op)收益率:

代码语言:javascript
复制
{'Author': 'Unknown'}
{'File': '/home/rudra/Downloads', 'Title': 'Formation of bcc non-equilibrium La, Gd and Dy alloys and the magnetic structure of Mg-stabilized [beta] Gd and [beta] Dy', 'Type': 'pdf', 'Page': '140'}

为id_auth代码行抛出一个KeyError:

代码语言:javascript
复制
id_auth=new_op["Author"].split()[-1]
KeyError: 'Author'

如果op中没有Author键,我正在尝试保持Author = Unknow。我怎么能做到这一点?

作为参考,下面是exiftool的输出:

代码语言:javascript
复制
ExifTool Version Number         : 10.20
File Name                       : Formation of bcc non-equilibrium La Gd and Dy alloys and the mag.pdf
Directory                       : /home/rudra/Downloads
File Size                       : 2.2 MB
File Modification Date/Time     : 2016:07:20 15:30:48+02:00
File Access Date/Time           : 2016:08:16 19:20:21+02:00
File Inode Change Date/Time     : 2016:08:16 18:13:30+02:00
File Permissions                : rw-rw-r--
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.7
Linearized                      : No
XMP Toolkit                     : Adobe XMP Core 5.2-c001 63.143651, 2012/04/05-09:01:49
Modify Date                     : 2015:09:18 07:48:48-07:00
Create Date                     : 2015:09:18 07:48:48-07:00
Metadata Date                   : 2015:09:18 07:48:48-07:00
Creator Tool                    : Appligent AppendPDF Pro 5.5
Document ID                     : uuid:f06a868b-a105-11b2-0a00-782dad000000
Instance ID                     : uuid:f06aec42-a105-11b2-0a00-400080adfd7f
Format                          : application/pdf
Title                           : Formation of bcc non-equilibrium La, Gd and Dy alloys and the magnetic structure of Mg-stabilized [beta] Gd and [beta] Dy
Producer                        : Prince 9.0 rev 5 (www.princexml.com)
Appligent                       : AppendPDF Pro 5.5 Linux Kernel 2.6 64bit Oct  2 2014 Library 10.1.0
Page Count                      : 140
Creator                         : Appligent AppendPDF Pro 5.5
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-17 17:55:17

有很多方法可以做到这一点,但最简单的方法是删除字典的初始版本,然后检查作者是否存在:

代码语言:javascript
复制
new_op = {
    field: str(value) for field in fields
    for key, value in op[0].items() if field.lower() in key.lower()
}
if 'Author' not in new_op:
    new_op['Author'] = 'Unknown'
票数 1
EN

Stack Overflow用户

发布于 2016-08-17 17:56:13

您正在重新分配new_op字典。相反,在下面的赋值之后

代码语言:javascript
复制
new_op = {
    field: str(value) for field in fields
    for key, value in op[0].items() if field.lower() in key.lower()
}

执行以下操作:

代码语言:javascript
复制
if not new_op.has_key('Author'):
    new_op['Author'] = 'Unknown'
票数 0
EN

Stack Overflow用户

发布于 2016-08-17 17:56:18

代码语言:javascript
复制
try:
    id_auth=new_op["Author"].split()[-1]
except KeyError:
    id_auth="Unknown"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38993266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档