根据值对 key:value 对进行排序

Sort the key:value pairs wrt value

我正在加载的测试 excel 中的一列看起来像这样:

Apple:3, Mango:2, Orange:2, Fig:5, Berry:1, Cherry:99

这是在单列中。

我正在尝试使用 python。

有 100 行在单个列中包含这样的记录。

我想把它分成不同的列。我试过拆分“,”。我只是无法正确处理任何事情

现在我想要这样的输出

Cherry:99,Fig:5,Apple:3,Mango:2,Orange:2,Berry:1

Python sorted()

The sorted() method returns a sorted list from the given iterable.

Syntax : sorted(iterable, key, reverse)

Parameters : sorted takes three parameters from which two are optional.

Iterable : sequence (list, tuple, string) or collection (dictionary, set, frozenset) or any other iterator that needs to be sorted.

Key(optional) : A function that would server as a key or a basis of sort comparison.

Reverse(optional) : If set true, then the iterable would be sorted in reverse (descending) order, by default it is set as false.

data = {'Apple':3, 'Mango':2, 'Orange':2, 'Fig':5, 'Berry':1, 'Cherry':99}
sorted_data = sorted(data.items(), key=lambda kv: kv[1], reverse=True)
print (dict(sorted_data))

输出:

{'Cherry': 99, 'Fig': 5, 'Apple': 3, 'Mango': 2, 'Orange': 2, 'Berry': 1}

将正则表达式与 sorted

结合使用

例如:

import re
data = "Apple:3, Mango:2, Orange:2, Fig:5, Berry:1, Cherry:99"
print(", ".join(sorted(data.split(", "), key=lambda x: int(re.search(r"(\d+)", x).group(1)), reverse=True)))

输出:

Cherry:99, Fig:5, Apple:3, Mango:2, Orange:2, Berry:1
  • int(re.search(r"(\d+)", x).group(1)) 查找字符串中的整数。

对于Pandas DF

例如:

import re
import pandas as pd

df = pd.DataFrame({"data": ["Apple:3, Mango:2, Orange:2, Fig:5, Berry:1, Cherry:99"]})
df["data"] = df["data"].apply(lambda z: ", ".join(sorted(z.split(", "), key=lambda x: int(re.search(r"(\d+)", x).group(1)), reverse=True)))
print(df)
row = "Apple:3, Mango:2, Orange:2, Fig:5, Berry:1, Cherry:99"

key_value_pairs_list = [x.lstrip().rstrip() for x in  row.split(",")]

key_value_pairs_dict = {}
for value in key_value_pairs_list:
    fruit, count = value.split(':')
    key_value_pairs_dict[fruit] = count

sorted_data = sorted(key_value_pairs_dict.items(), key=lambda kv: kv[1], reverse=True)

new_str = ", ".join([key + ':' + str(value) for key, value in sorted_data])
print(new_str)