Python使用wikidata.client获取Wikidata实体多值属性列表
问题说明
需求为获取Wikidata中部分作家实体的全量信息,测试用实体ID为Q39829。
原有代码在处理多值属性时返回结果不全:测试实体的子女属性(P40)共关联3个实体,运行代码仅能返回1个子女名称。
原代码片段:
from wikidata.client import Client client = Client() entity = client.get('Q39829', load=True) # Spouse spouse_prop = client.get('P26') spouse = entity[spouse_prop] print('Mother: ', spouse.label) # Children child_prop = client.get('P40') child = entity[child_prop] print('Children: ', dir(child)) print(child.label)
问题原因
使用wikidata.client库时,直接通过entity[属性对象]的方式取值,遇到多值属性只会返回第一个匹配结果,不会返回全量值集合。
修复方法
替换取值方式,调用实体对象的getlist()方法获取指定属性的所有关联值,该方法返回值为列表,无论属性是单值还是多值都能正常兼容,不会漏结果。
修复后可运行代码:
from wikidata.client import Client client = Client() entity = client.get('Q39829', load=True) # 获取配偶信息(原代码此处标注有误,P26是配偶属性,母亲属性对应ID为P25) spouse_prop = client.get('P26') all_spouses = entity.getlist(spouse_prop) print('配偶:') for s in all_spouses: print(f'- {s.label}') # 获取全部子女信息 child_prop = client.get('P40') all_children = entity.getlist(child_prop) print('\n子女:') for c in all_children: print(f'- {c.label}')
运行后即可拿到所有关联的实体信息,解决多值属性结果不全的问题。
内容的提问来源于stack exchange,提问作者TiBrains
相关产品推荐
相关产品推荐

