根据值对 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)
我正在加载的测试 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)