我对Python还是比较陌生,在R方面有超过一年的编程经验。
我正在尝试编写代码,以帮助我更新Zotero库中的特定字段,以使其符合引用标准。
我注意到Zotero中的author
字段可以映射到字典对象中的各个项目。
from pyzotero import zotero as z
zot = z.Zotero(library_id, library_type, api_key, preserve_json_order=True)
zot.collections()
song_historiography=zot.collection_items('GLN5VY3Z')
x=int()
song_historiography[x]['data']['creators']
通过更改x
的值,我看到了存储作者姓名的不同数据结构。
[{'creatorType': 'author', 'name': '舒仁輝'}]
[{'creatorType': 'author', 'firstName': 'On Cho', 'lastName': 'Ng'},
{'creatorType': 'author', 'firstName': 'Q. Edward', 'lastName': 'Wang'}]
[{'creatorType': 'author', 'firstName': 'Peter K.', 'lastName': 'Bol'},
{'creatorType': 'editor',
'firstName': 'Dieter Kuhn',
'lastName': 'Helga Stahl'}]
我们如何(整体和/或单独)访问整个集合的name
,firstName
和lastName
字段,以便可以直接通过代码对其进行更改?
答案 0 :(得分:1)
我认为DataFrame
中的pandas
是您的理想解决方案。
import pandas as pd
首先,我合并了一个列表中的数据。
data = [
[{'creatorType': 'author', 'name': '舒仁輝'}],
[{'creatorType': 'author', 'firstName': 'On Cho', 'lastName': 'Ng'},
{'creatorType': 'author', 'firstName': 'Q. Edward', 'lastName': 'Wang'}],
[{'creatorType': 'author', 'firstName': 'Peter K.', 'lastName': 'Bol'},
{'creatorType': 'editor', 'firstName': 'Dieter Kuhn', 'lastName': 'Helga Stahl'}]
]
authors = []
for d in data: authors += d
print (authors)
[{'creatorType': 'author', 'name': '舒仁輝'}, {'creatorType': 'author', 'firstName': 'On Cho', 'lastName': 'Ng'}, {'creatorType': 'author', 'firstName': 'Q. Edward', 'lastName': 'Wang'}, {'creatorType': 'author', 'firstName': 'Peter K.', 'lastName': 'Bol'}, {'creatorType': 'editor', 'firstName': 'Dieter Kuhn', 'lastName': 'Helga Stahl'}]
从authors
创建的DataFrame
df = pd.DataFrame(authors)
print (df)
creatorType firstName lastName name
0 author NaN NaN 舒仁輝
1 author On Cho Ng NaN
2 author Q. Edward Wang NaN
3 author Peter K. Bol NaN
4 editor Dieter Kuhn Helga Stahl NaN
而且,我举了一个为特定项目设置值的示例。
df.at[df.name == '舒仁輝','firstName'] = 'John'
df.at[df.firstName.str.contains('Cho'), 'creatorType'] = 'editor'
print (df)
creatorType firstName lastName name
0 author John NaN 舒仁輝
1 editor On Cho Ng NaN
2 author Q. Edward Wang NaN
3 author Peter K. Bol NaN
4 editor Dieter Kuhn Helga Stahl NaN