我有一个字典,其中整数值作为键,值具有一个或多个值作为列表。
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
这就是我现在所拥有的。
答案 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