2016-08-07 2 views
4

저는 파이썬을 처음 접했고 목록에서 특정 값이나 키를 얻는 데 어려움을 겪고 있습니다.목록에서 키 또는 값을 추출하는 치료

내 스크랩 한 아이템이 가치를 출력 할 때 때때로 나는 이와 같은 결과를 얻습니다.

첫 번째 목록 :

'image_urls': [u'http://www.websites.com/1.jpg', 
       u'http://www.websites.com/2.jpg', 
       u'http://www.websites.com/3.jpg'], 
지금

내가 더 타겟 XPath를 수행하고 숫자로 요소를 선택하여이 문제를 해결 작업 한 [2]하지만 내 진짜 문제는 긁힌 이미지

에서 이러한 수익률 함께

두 번째 목록 :

'images': [{'checksum': '2efhz768djdzs76dz', 
      'path': 'full/2efhz768djdzs76dz.jpg', 
      'url': 'http://www.websites.com/1.jpg'}, 
      {'checksum': 'zadz764dhqj34dsjs', 
      'path': 'full/zadz764dhqj34dsjs.jpg', 
      'url': 'http://www.websites.com/2.jpg'}], 

내가 sqlite3를 사용하고 item.get

item.get를 ('image_urls', '')

어떻게 당신이 문자열 값의 목록을 병합 않거나 그것의 순위에 따라 목표 알 내 다른 긁어 데이터를 저장하는 방법? (첫 번째 목록)

및 체크섬, 경로 및 URL item.get 값을 어떻게 얻습니까? (두 번째 목록)

편집 : 난 아직 두 번째 문제에 대한 해결책을 찾고 있어요는 :

'images': [{'checksum': '2efhz768djdzs76dz', 
      'path': 'full/2efhz768djdzs76dz.jpg', 
      'url': 'http://www.websites.com/1.jpg'}, 
      {'checksum': 'zadz764dhqj34dsjs', 
      'path': 'full/zadz764dhqj34dsjs.jpg', 
      'url': 'http://www.websites.com/2.jpg'}], 

내가 첫 번째 또는 두 번째 얻는 방법 :

이 출력입니다 체크섬은 sqlite 열로 이동합니다. 나는 현재 spracy 항목이 스크랩 된 항목의 이름을 나타내는 item.get ('scrapy-item', '')입니다. 코드 예제에서 가능하면

item.get

+1

당신의 SQLite는 테이블이 무엇처럼 보이나요 :이 솔루션은 당신이 당신의 질문에 대한 이해를 기반으로 원하는 걸 줄 수 최적이 아닌 경우에도 위로의 질문에

? –

답변

2

대상 사전의 목록을 병합 순위

x['image_urls'][0] 

에 따라 당신에게 배열 및 사전 사이의 변환을 처리하는 방법에 대한 개요를 제공한다

>>> images 
[{'path': 'full/2efhz768djdzs76dz.jpg', 'url': 'http://www.websites.com/1.jpg', 'checksum': '2efhz768djdzs76dz'}, {'path': 'full/zadz764dhqj34dsjs.jpg', 'url': 'http://www.websites.com/2.jpg', 'checksum': 'zadz764dhqj34dsjs'}] 
>>> list(map(lambda x : x['url'] + '/' + x['path'], images)) 
['http://www.websites.com/1.jpg/full/2efhz768djdzs76dz.jpg', 'http://www.websites.com/2.jpg/full/zadz764dhqj34dsjs.jpg'] 
>>> list(map(lambda x : x['checksum'], images)) 
['2efhz768djdzs76dz', 'zadz764dhqj34dsjs'] 

위의 코드 값. 람다 함수를 선호하지만 전체 배열을 반복하고 값을 얻을 수도 있습니다.

호프가 도움이되기를 바랍니다. 나는 정말로 치료에 익숙하지 않습니다. 그래서 당신이 아직 확실하지 않다면 코멘트를 남겨주세요.

+1

필립 고맙습니다.하지만 두 번째 목록에서 특정 값을 타겟팅하는 데 여전히 문제가 있습니다. item.get (람다 x : x [checksum '] [0], 이미지)) 하지만 행운이 없습니다. 내 이름 입력 이미지가 정의되지 않았다. 비록 내 치료 결과가 두 번째 목록의 출력을 명확하게 보여 주지만 – user1443063

+0

@ user1443063'images'는 사전 배열에 대한 이름 일 뿐이다. 치료법이나 다른 프레임 워크를 사용하는 경우 먼저 데이터 세트를 일부 데이터 구조로 구문 분석하십시오. 이 경우 배열이 의미가 있습니다. 그런 다음 나중에 람다 함수 등을 사용하여이 데이터 구조를 처리합니다. "출력"에서 데이터 집합이 저장되는 방법을 알려주는 것은 매우 어렵습니다. 그래서 방금 사전리스트를 만들었습니다. –

2

내가 무엇을 묻고 있지만 치료와 관련이없는 것 같아서 치료 태그를 제거하면 더 많은 사람들이 귀하의 질문을 열고 조언을 제공 할 수 있습니다.

websites_urls=[] 
checksums=[] 
paths=[] 
whole_item=[] 
for image_url in item.get('image_urls'): 
    for image in item.get('images'): 
     if image_url==image['url']: 
      websites_urls.append(image['url']) 
      checksums.append(image['checksum']) 
      paths.append(image['path']) 
      whole_item.append(image) 
      break 
관련 문제