2014-09-18 7 views
-5

정수 값을 키로 사용하는 사전이 있으며 값은 하나 또는 여러 값을 list로가집니다. 이에파이썬에서 사전의 값에 정수 값을 할당하는 방법은 무엇입니까?

PERSON   SCORE  POSITION 
    Roopa Valipe 100   1 
    John Smith  99   2 
    Souju Goud  99   2 
    Hemanth Hegde 98   4 

모든지도가 많은 도움이 될 것입니다 다음과 같이

100 ['Roopa Valipe '] 
    99 ['John Smith', 'Souju Goud'] 
    98 ['Hemanth Hegde'] 

나는 값을 할당하고 출력을 인쇄 할 수 있습니다.

업데이트 : 나는 값을 키로 반전하고 그 반대의 경우도 마찬가지입니다. 하나의 키 값을 읽을 수 있습니다. 그러나 하나의 '값'으로 여러 개의 키 매핑을 사용하는 경우 여기서부터 어떻게 진행해야할지 모르겠습니다.

['Hemanth Hegde'] 98 
['John Smith', 'Souju Goud'] 99 
['Roopa Valipe '] 100 

이것은 내가 지금 가지고있는 것입니다.

답변

0

파이썬에서는 임의의 해시 가능 유형을 사전 키로 사용할 수 있습니다. 정수와 문자열은 해시 가능합니다. 그러나 튜플과 같은 많은 불변의 데이터 구조도 그렇습니다.

질문에 직접 대답하려면 간단히 정수를 키로 사용하십시오. 전에 해봤습니까?

+0

저는 아직 배우면서 파이썬에 대한 기본적인 지식을 가지고 있습니다. 해시 가능한 유형의 개념을 이해하고이를 사전 키로 사용합니다. 나는 이것을 사용하는 방법을 알아낼 수 없다. – ChillBan123

1

다음은 몇 가지 코드로 작동합니다.

data = { 
    100: ['Roopa Valipe'], 
    99: ['John Smith', 'Souju Goud'], 
    98: ['Hemanth Hegde'], 
} 

fmt = '{:<20}{:<10}{:<10}' 
print fmt.format('PERSON', 'SCORE', 'POSTITION') 
position = 1 
for score, people in sorted(data.items(),reverse=True): 
    for person in sorted(people): 
     print fmt.format(person, score, position) 
    position += len(people) 

출력 여기

PERSON    SCORE  POSTITION 
Roopa Valipe  100  1   
John Smith   99  2   
Souju Goud   99  2   
Hemanth Hegde  98  4   
0

빠른 솔루션입니다. justanr는 지적

import ast 

indata = """ 
    100 ['Roopa Valipe '] 
    99 ['John Smith', 'Souju Goud'] 
    98 ['Hemanth Hegde'] 
""" 

parts = (row.split(None, 1) for row in indata.splitlines()) 
not_empty = filter(bool, parts) 

d = {} 
for value, keys in not_empty: 
    keys, value = map(ast.literal_eval, (keys, value)) 
    d.update({key : value for key in keys}) 
score_first = [(y, x) for x, y in d.items()] 
result = sorted(score_first, reverse=True) 

for place, (score, name) in enumerate(result, start=1): 
    print "{name:<20}{score:>4}{place:>4}".format(**locals()) 
0

(하지만 인내와 컨설팅 문서의 비트와 함께, 당신은 몇 가지를 배울 수 있음) 나중에 더 많은 시간이 있다면, 좀 더 기본적이고 간단한 방법으로 그것을 다시 작성하거나 의견을 추가 할 정수는 사전 키에 사용할 수 있습니다. 좋아요 :

d = {100: ['Roopa Valipe '], 
    99: ['John Smith', 'Souju Goud'], 
    98: ['Hemanth Hegde'] 
    } 

두 번째 질문 :이 테이블을 만드는 방법 은요? 가장 큰 문제는 사전이 항목의 순서를 유지하지 않고 키를 정렬하는 것이 문제라는 데이터 구조입니다. 게시물 here을 참조하십시오. 키 목록을 만들어이 문제를 해결할 수 있습니다. 목록을 정렬 할 수 있습니다.

format_strg = "{0:20}{1:<10}{2:<10}\n" 
out = format_strg.format("PERSON", "SCORE", "POSITION") 
keys = sorted(d.keys(), reverse=True) #create a list of sorted keys 
for pos,key in enumerate(keys): 
    for item in d[key]: 
     out += format_strg.format(item, key, pos+1) 
print out 
관련 문제