我将csv加载到pandas数据框中,如下所示:
TYPE BENEFIT_CATEGORY FORMULA TEXT_1 MULTIPLIER TEXT_2
A MATH Y You can earn up to 50 Rs per year
A SCIENCE Y You can earn up to 100 Rs per year
A TOTAL Y You can earn up to 200 Rs per year
A SOCIAL Y You can earn up to 50 Rs per year
B SOCIAL Y You can earn up to 20 Rs per year
B MATH Y You can earn up to 10 Rs per year
B TOTAL Y You can earn up to 30 Rs per year
我有以下代码来创建字典:
def cc_benefits(df_benefit):
benefits = {}
for row in df_benefit.itertuples():
if row.FORMULA == 'N':
description = str(row.TEXT_1)
else:
string = str(row.TEXT_1)
formula = row.MULTIPLIER
description = string + " " + str(formula) + " " + str(row.TEXT_2)
if row.TYPE in benefits:
benefits[row.TYPE].append({
'Name': row.BENEFIT_CATEGORY,
'Description': description,
'value' : formula
})
else:
benefits[row.TYPE] = [
{
'Name': row.BENEFIT_CATEGORY,
'Description': description,
'value' : formula
}
]
# as suggested by @skaul
benefits = sorted(benefits, key=lambda k: int(k['value']),reverse = True)
for i in benefits:
del i['value']
# as suggested by @skaul
return benefits
称为
benefits = cc_benefits(df_benefit)
benefits['A']
返回:
[{'Name': 'MATH',
'Description': 'You can earn up to 50 Rs per year',
'value': 50},
{'Name': 'SCIENCE',
'Description': 'You can earn up to 100 Rs per year',
'value': 100},
{'Name': 'TOTAL',
'Description': 'You can earn up to 200 Rs per year',
'value': 200},
{'Name': 'SOCIAL',
'Description': 'You can earn up to 50 Rs per year',
'value': 50}]
但是我想要按排序顺序(按“值”并删除“值”并显示为)
[{'Name': 'TOTAL',
'Description': 'You can earn up to 200 Rs per year'},
{'Name': 'SCIENCE',
'Description': 'You can earn up to 100 Rs per year'},
{'Name': 'MATH',
'Description': 'You can earn up to 50 Rs per year'},
{'Name': 'SOCIAL',
'Description': 'You can earn up to 50 Rs per year'}]
我不确定,是否可能?还需要一种pythonic的方法吗? 任何帮助都受到高度赞赏吗?
答案 0 :(得分:0)
df_benefits.sort(['MULTIPLIER'],ascending=True)
df_benefits.drop(columuns='value')
如果在将其转换为字典之前运行此命令,则应该对其进行排序且没有值。
您还应该在for循环中删除“值”
已更新
答案 1 :(得分:0)
尝试以下代码:
x = [{"Name":"MATH","Description":"You can earn up to 50 Rs per year","value":50},{"Name":"SCIENCE","Description":"You can earn up to 100 Rs per year","value":100},{"Name":"TOTAL","Description":"You can earn up to 200 Rs per year","value":200},{"Name":"SOCIAL","Description":"You can earn up to 50 Rs per year","value":50}]
newlist = sorted(x, key=lambda k: int(k['value']),reverse = True)
for i in newlist:
del i['value']
答案 2 :(得分:0)
Maybe you could try defining a function to sort your dictionary :
def sort_dic(d):
for key, value in sorted(sorted(d.items()), key=itemgetter(1), reverse=True):
yield key, value
Or
def sort_dic(d):
for key, value in sorted(d.items(), key=lambda a: (-a[1], a[0])):
yield key, value