>source

dict 목록에서 일부 항목을 삭제해야합니다. 이 목록은 Google Drive Rest Api를 호출하여 생성됩니다.

여러 코드 샘플을 시도했지만 작동시킬 수 없습니다. 저는 파이썬 초보자입니다.

#this is the Google Api call
theFiles = drive_service.files().list(fields="files(id,name,modifiedTime, size, fileExtension)").execute()
#here I am trying to iterate the results and delete all items that refer to a "temp" file:
for k, v in theFiles.items():
    if v[4]=="tmp":
        del theFiles[k]

확장자가 "tmp"인 레코드가이 목록에서 삭제 될 것으로 예상했지만 작동시킬 수 없습니다.

나는 v[4] 생각  whould는 사전의 "fileExtension"필드를 참조합니다. 그러나 디버깅 할 때 v[4] 가 보입니다.  전체 항목을 포함합니다 (예 :

).
{'fileExtension': 'docx', 'id': '1u7zrCm3waGr9CiEmPl...F2acV7NvC', 'modifiedTime': '2019-05-03T18:59:19.000Z', 'name': '~$ LENGUA PROG.docx', 'size': '162'}

확장자가 ".tmp"인 항목을 삭제하는 올바른 코드를 작성하는 방법을 이해하도록 도와주세요.


  • 답변 # 1

    enumerate () 함수를 사용하여 반복하는 시퀀스의 요소와 함께 인덱스를 생성 할 수 있습니다. 항목이 다음과 유사하다고 가정합니다.

    items = [{'fileExtension': 'docx', 'id': '1u7zrCm3waGr9CiEmPl...F2acV7NvC',
     'modifiedTime': '2019-05-03T18:59:19.000Z',
    'name': '~$ LENGUA PROG.docx', 'size': '162'}]
    
    

    아래와 같이 "temp"파일을 참조하는 모든 항목을 삭제할 수 있습니다 :

    for index,item in enumerate(items):
        if item['fileExtension'] =="tmp":
            del items[index]
    
    

  • 답변 # 2

    도움을 주셔서 감사합니다.이 방법에 대한 실마리를 얻었습니다. 몇 가지 연구를 마친 후에 이해력을 얻었습니다.

    dicFiles[:]  = [x for x in dicFiles if x['name'].endswith('.tmp')]
    
    

    그 일을 해요.

관련 자료

  • 이전 shiny - 범례에 스크롤 막대를 어떻게 포함시킬 수 있습니까?
  • 다음 python - 데카르트 곱이 "typeerror - 0-d 배열에 대한 반복"을 생성하는 이유는 무엇입니까?