Python排名和列表

时间:2012-12-14 08:29:39

标签: python rank

我有这个脚本,假设根据数字对水果进行排名。

#! /usr/bin/python
fruits = {'Apple':1,'Banana':2,'Pineapple':3}
alist = [(v, k) for k, v in fruits.items()]
alist.sort(reverse=False)
fruit_order = str(alist).translate(None, "[]()'123456789").replace(", , ",    "    ,     ",").replace(" ", "")[1:]
print fruit_order

水果实际上是一个用.append(水果)检查组成的清单

#! /usr/bin/python
import re
from configobj import ConfigObj
config = ConfigObj('sites.conf')
fruits = []

substance = "juice"
target_list = config['MainConfig']['fruits']
for target in target_list:
  if re.search( config[target]['Skiplist'], substance, re.M|re.I):
     target = target + "'" + ":" + config[target]['Rank'] + ","
     fruits.append(target)
  else:
   print "Dident pass"
fruits1 = "{'" + "'".join(fruits) + "}"
alist = [(v, k) for k, v in fruits1.list()]
alist.sort(reverse=False)
fruit_rank = str(alist).translate(None, "[]()'123456789").replace(", , ", ",").replace(" ", "")[1:]

print fruit_rank在示例2中打印出一行看起来与示例1中的test完全相同。

但我仍然在example2上出现错误,AttributeError:'str'对象没有属性'list'

我无法真正理解这一点。我该怎么办?

我想要的是在配置文件中我对每个水果都有一个等级,该行应该打印出其等级中的水果。

2 个答案:

答案 0 :(得分:2)

fruits = {'Apple': 1,'Banana': 2,'Pineapple': 3}
print ','.join(sorted(fruits, key=fruits.get))

答案 1 :(得分:0)

您应该使用内置函数sorted,并指定您希望按行列而不是名称本身进行排序。对于你的第一个例子,这就是我要做的。它按照其值(他们的等级)对dict的键(水果名称)进行排序。

fruits = {'Apple':1,'Banana':2,'Pineapple':3}
sorted_keys = sorted(fruits.keys(), key=lambda k: fruits[k])

你的第二个例子很难阅读。我建议您评论那些复杂的代码。

看起来您正在尝试创建包含Python代码的字符串,然后执行该代码。就像eval声明一样。这不是一个好的编程实践。你会想做类似的事情:

fruits = {} # create dict
for line in my_file.readlines():
    fruit_name, rank = function_to_parse_line(line)
    fruits[fruit_name] = rank
sorted_keys = sorted(fruits.keys(), key=lambda k: fruits[k])

现在,读取数据的代码和对其进行排序的代码之间存在很好的分离。如果您想从其他类型的文件中读取数据,则可以重新定义function_to_parse_line