python 如何在对象数组中选择一个属性

bf1o4zei  于 2023-06-20  发布在  Python
关注(0)|答案(2)|浏览(139)

我在选择数组中一个对象的一个属性时遇到了问题。这是一个数组(我尝试用pickle发送这个,但我不能使用):

items = []
results = service.files().list(corpora="drive",driveId=map_project_ids[project],pageSize=1000, pageToken=pageToken,supportsAllDrives=True,includeItemsFromAllDrives=True,q="mimeType = 'application/vnd.google-apps.folder'",fields="nextPageToken, files(id,createdTime,name,parents)").execute()
items.extend(results.get('files', []))
pickle.dump(items,open(f"results_{PROJECT}.pkl","wb"))

后得到此数据形式谷歌驱动器(76k文件夹),我需要发送一个具体的信息,如id,家长,和创建时间的一个文件夹在数组中.
items数组结构为:

[{
    'parents': ['1H7cY0cncy5fXt7of0xxN3jdTmzk'], 
    'id': '1UDqOjxiZFPdY3goFPSecc53xOW4', 
    'name': '20620', 
    'createdTime': '2023-06-19T15:51:15.280Z'
 }, 
 {
    'parents': ['1kq6FBSvhIZqyQASntqOmL6AQEak'], 
    'id': '1CPDgaPOF3Kg4Ds26GpyxuJblQ3', 
    'name': '230620', 
    'createdTime': '2023-06-19T15:51:02.397Z'
 }]

如何才能只访问数组中每个条目的id、parent和createdTime到数据库中的存储?
我用的是Google Colab。
我试着:

for i in items:
  salvarDB (i.parents, i.id, i.createdTime)
5q4ezhmt

5q4ezhmt1#

前面代码的问题是,您试图使用点表示法(i.parentsi.idi.createdTime)访问每个项的属性,就好像数组中的项是objects一样。但是,数组中的项是字典,字典键使用方括号([])而不是点表示法访问。
试试这个代码

for item in items:
    parents = item['parents']
    folder_id = item['id']
    created_time = item['createdTime']
    salvarDB(parents, folder_id, created_time)
cbeh67ev

cbeh67ev2#

看看itemgetter。通过将所需的键传递给它,它返回一个可调用对象,该对象可以应用于可迭代对象。
PS它与列表,元组,...也是。

from operator import itemgetter

keys = "parents", "id", "createdTime"
for record in map(itemgetter(*keys), items):
    salvarDB(*record)

相关问题