在python dict中更改key并仅打印带有value的键值

在python dict中更改key并仅打印带有value的键值,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,我试图操纵一个口述: op = {'File:Directory': '/var/tmp/Mkbib/Trial2', 'PDF:Title': 'Antiferromagnetic-ferromagnetic transition in FeRh', 'PDF:Author': 'V. L. Moruzzi and P. M. Marcus', 'File:FileSize': '636 kB', 'File:FileInodeChangeDate': '2016:08:13 19:45:15

我试图操纵一个口述:

op = {'File:Directory': '/var/tmp/Mkbib/Trial2', 'PDF:Title': 'Antiferromagnetic-ferromagnetic transition in FeRh', 'PDF:Author': 'V. L. Moruzzi and P. M. Marcus', 'File:FileSize': '636 kB', 'File:FileInodeChangeDate': '2016:08:13 19:45:15+02:00'}

fields = ["author",  "year",  "journal", "title", "publisher"]
new_op = {}
for field in fields:
    # new_op = dict((field, value) for key, value in op.items() if field in key.lower())
    new_op[field] = value for key, value in op.items() if field in key.lower())
    print(new_op)
我的目标是将
op
的键从fields更改为matching(如果有)
字段,并使用新的键创建新的\u op,如果它有匹配的键,则创建值

因此,在上面的示例中,我的新_op应该是:

new_op = {'title': 'Antiferromagnetic-ferromagnetic transition in FeRh', 'author': 'V. L. Moruzzi and P. M. Marcus'}

注释行正在运行,但显然为每个项目创建了新的dict,并且为所有循环打印,这一点很明显。

您可以在此处使用字典理解

op = {
    'File:Directory': '/var/tmp/Mkbib/Trial2',
    'PDF:Title': 'Antiferromagnetic-ferromagnetic transition in FeRh',
    'PDF:Author': 'V. L. Moruzzi and P. M. Marcus',
    'File:FileSize': '636 kB',
    'File:FileInodeChangeDate': '2016:08:13 19:45:15+02:00'
}

fields = [
    'author',
    'year',
    'journal',
    'title',
    'publisher'
]

new_op = {
    field: value for field in fields
    for key, value in op.items() if field in key.lower()
}

print(new_op)  # {'title': 'Antiferromagnetic-ferromagnetic transition in FeRh', 'author': 'V. L. Moruzzi and P. M. Marcus'}

您可以创建一个新的键并删除旧的键。Dictionary comprehension创建一个OP明确不想要的新字典。我认为OP的语句不想为每个项创建一个新键,而不是为整个项创建一个新键。