如何在python中为字典中的值分配整数值?

时间:2014-09-18 12:29:19

标签: python dictionary

我有一个字典,其中整数值作为键,值具有一个或多个值作为列表。

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

我必须分配值并按如下方式打印输出:

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

对此的任何指导都非常有帮助。

更新: 我现在已将值反转为键,反之亦然。我可以阅读一个单一的键值。但是,如果我将多个键映射到单个“'值”,我不太清楚如何从这里开始。

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

这就是我现在所拥有的。

4 个答案:

答案 0 :(得分: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         

答案 1 :(得分:0)

在Python中,您可以使用任何hashable类型作为字典键。整数和字符串是可清除的。但是,像元组这样的许多不可变数据结构也是如此。

要直接回答您的问题,只需使用整数作为键即可。你之前尝试过这样做吗?

答案 2 :(得分:0)

这是一个快速解决方案。如果我以后有更多的时间,我会尝试以更基本和简化的方式重写它或添加评论(但有一点耐心和咨询文档,你可能会学到一些东西;)

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())

答案 3 :(得分:0)

正如justanr指出的那样,整数可以用于字典键。像这样:

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