2016-09-19 2 views
0

목록에있는 동일한 개체를 분류하는 값을 할당 할 수있는 사전을 만들어야합니다. 내가 기존 값을 가지고 있지 않다는 것에 주목하자. 파이썬이 값을 할당하기를 바란다. 우리가 u'the 공동의 문제 '는 다음 제목을 시작할 때까지목록의 비슷한 항목에 값을 할당하는 디렉토리는 어떻게 만듭니 까?

In [38]: post_title_list 
Out[38]: [u'the rfe master list', 
      u'the rfe master list', 
      u'the rfe master list', 
      ...] 

RFE 마스터 목록에 약 700 회 이상 계속 : 여기에 내가 가진 것입니다. 목록에 새로운 문구 하나당 하나의 번호를 할당하고 싶기 때문에 rfe 마스터 목록에 2가 할당 될 공동 문제가 발생할 때까지 1을 할당합니다.

나는 행운과 함께 다음과 같은 코드를 시도 :

In [39]: d = dict(zip(post_title_list, range(len(post_title_list))) 
    Out[39]: {u'the rfe master list': '491818'} 

    In [40]: {item: str(i) for i, item in enumerate(post_title_list)} 
    Out[40]: {u'the rfe master list': '491818'} 

    In [41]: dict.fromkeys(post_title_list) 
    Out[41]: {u'the rfe master list': None} 

원하는 출력 :

Out[42]: {u'the rfe master list': 1, 
      u'the rfe master list': 1, 
      u'the rfe master list': 1, 
      u'the co problem'  : 2, 
      u'the co problem'  : 2, 
      u'expecting delays' : 3, 
      u'denied help   : 4, 
      ...} 

당신을 감사합니다.

+0

동일한 다중 키를 사용할 수 없습니다. 하나의 rfe 마스터리스트 만 가질 수 있으며, 다른 것을 추가하면 이전 마스터를 대체합니다. –

+0

키는 파이썬'dict'에서 유사 할 수있는 반면, 다른 키들에 대해 비슷한 값을 가질 수 있습니다. –

+0

사전의 각 키는 고유해야하므로 중복 된 항목을 갖는 목표는 불가능합니다. 정말로 중복이 필요한 경우 [('master list', 1)]와 같은 값/숫자 쌍 목록을 만들 수 있습니다. –

답변

1

사전에 언급 된대로 고유 한 키가 있어야합니다. 그래서 나는 튜플 목록을 제안 할 것이다.

ctr = 1 

l = [ 
    'a', 
    'a', 
    'a', 
    'a', 
    'a', 
    'a', 
    'a', 
    'a', 
    'b', 
    'b', 
    'b', 
    'b', 
    'b', 
    'b', 
    'c', 
    'c', 
    'c', 
    'c', 
    'c', 
] 

out = [] 
for idx, element in enumerate(l): 
    if idx == 0: 
     out.append((element, ctr)) 
    else: 
     if element != l[idx-1]: 
      ctr = ctr + 1 
     out.append((element, ctr)) 

print(out) 

이리스트가 인쇄되는 방식에 따라 다르다

을 언급 인해

[('a', 1), 
('a', 1), 
('a', 1), 
('a', 1), 
('a', 1), 
('a', 1), 
('a', 1), 
('a', 1), 
('b', 2), 
('b', 2), 
('b', 2), 
('b', 2), 
('b', 2), 
('b', 2), 
('c', 3), 
('c', 3), 
('c', 3), 
('c', 3), 
('c', 3)] 

업데이트를 제공합니다 : 가 원하는 출력의 유사한 형태를 생성하려면, 뭔가 같이 제안 당신이 사용하고있는 개발 환경. 그러나 IDE와 무관 한 작업을하려면 다음 작업을 수행해야합니다.

for t in out: 
    print(t) 
+0

잘 작동하지만 목록을 출력 할 때 다음과 같이 보입니다. [('a', 1), ('a', 1), ('a', 1) ...] 인쇄물 (세로 형)처럼 보이게하려면 어떻게해야합니까? 고마워요! – glongo

1

질문에 대한 의견에서 이미 지적했듯이 사전의 동일한 키에 대해 여러 항목을 가질 수 없습니다. 모든 타이틀이 해당 번호를 한 번만 및지도 발생하는 사전 될 것이다 갈

한 가지 방법 : 또는

d = {} 
next_id = 1 
for title in post_title_list: 
    if title not in d: 
     d[title] = next_id 
     next_id += 1 

, 당신은 목록의 모든 요소에 대해 튜플 (title,id)으로 목록을 만들 수 있습니다 :

l = [] 
next_id = 0 
last = None 
for title in post_title_list: 
    if title != last: 
     next_id += 1 
    l.append((title,next_id)) 
    last = title 
+0

잘 작동하지만 목록을 인쇄하면 다음과 같이 보입니다. [('a', 1), ('a', 1), ('a', 1) ...] 어떻게 만들 수 있습니까? 인쇄물처럼 보입니다 (일명 세로) 감사합니다! – glongo

관련 문제