Python 我如何根据特定位置的类似项目安排列表
我想安排第二部分的测试列表项=11man:Army,它们有相似的单词,然后安排它,使11man:Army之后的值在一个新列中相邻,11man:Army是堆栈和测试的值 输入:Python 我如何根据特定位置的类似项目安排列表,python,list,Python,List,我想安排第二部分的测试列表项=11man:Army,它们有相似的单词,然后安排它,使11man:Army之后的值在一个新列中相邻,11man:Army是堆栈和测试的值 输入: test = [[[0.52, '1_1man::army'], 'stack'], [[0.45, '3_3man::army'], 'flow'], [[0.52, '1_1man::army'], 'testing'], [[0.52, '2_2man:army'], 'expert']
test = [[[0.52, '1_1man::army'], 'stack'],
[[0.45, '3_3man::army'], 'flow'],
[[0.52, '1_1man::army'], 'testing'],
[[0.52, '2_2man:army'], 'expert']]
代码:
预期产出:
打印测试
test = [[[0.52, '1_1man::army'], 'stack', 'testing'],
[[0.45, '3_3man::army'], 'flow'],
[[0.52, '2_2man:army'], 'expert']]
谁能帮我一下吗。如果可能,按照整数值0.45,0.52按升序排列
排序输出:
test = [[[0.45, '3_3man::army'], 'flow'],
[[0.52, '1_1man::army'], 'stack', 'testing'],
[[0.52, '2_2man:army'], 'expert']]
更新:
如果我想使用下面Rahul所示的示例,如何加载它
我的文本文件是这样的
[0.52, '1_1man::army'], 'stack']
[0.45, '3_3man::army'], 'flow']
[0.52, '1_1man::army'], 'testing']
[0.52, '2_2man:army'], 'expert']
如何加载 您可以通过groupby来实现这一点
排序在这里很重要,因为groupby将仅使用调整元素进行分组。以及用于标识分组键的lambda函数
编辑1
根据你问题中的修改。如果需要根据浮点值进行排序
In [60]: result = []
In [58]: for g,val in groupby(sorted(test,key=lambda x:x[0][1]),key=lambda x:x[0][1]):
...: g_values = list(val)
...: keys = [i[1] for i in g_values]
...: result.append(list([g_values[0][0]] + keys))
...:
In [60]: sorted(result,key=lambda x:x[0][0])
Out[60]:
[[[0.45, '3_3man::army'], 'flow'],
[[0.52, '1_1man::army'], 'stack', 'testing'],
[[0.52, '2_2man:army'], 'expert']]
编辑2
如果您正在从文件中读取
In [83]: from ast import literal_eval
In [84]: fp = open('file_name.txt')
In [85]: test = [literal_eval(i) for i in fp.readlines()]
最终的解决方案是这样的
from ast import literal_eval
fp = open('file_name.txt')
test = [literal_eval(i) for i in fp.readlines()]
result = []
for g,val in groupby(sorted(test,key=lambda x:x[0][1]),key=lambda x:x[0][1]):
g_values = list(val)
keys = [i[1] for i in g_values]
result.append(list([g_values[0][0]] + keys))
print(sorted(result,key=lambda x:x[0][0]))
你可以用groupby来做这件事
排序在这里很重要,因为groupby将仅使用调整元素进行分组。以及用于标识分组键的lambda函数
编辑1
根据你问题中的修改。如果需要根据浮点值进行排序
In [60]: result = []
In [58]: for g,val in groupby(sorted(test,key=lambda x:x[0][1]),key=lambda x:x[0][1]):
...: g_values = list(val)
...: keys = [i[1] for i in g_values]
...: result.append(list([g_values[0][0]] + keys))
...:
In [60]: sorted(result,key=lambda x:x[0][0])
Out[60]:
[[[0.45, '3_3man::army'], 'flow'],
[[0.52, '1_1man::army'], 'stack', 'testing'],
[[0.52, '2_2man:army'], 'expert']]
编辑2
如果您正在从文件中读取
In [83]: from ast import literal_eval
In [84]: fp = open('file_name.txt')
In [85]: test = [literal_eval(i) for i in fp.readlines()]
最终的解决方案是这样的
from ast import literal_eval
fp = open('file_name.txt')
test = [literal_eval(i) for i in fp.readlines()]
result = []
for g,val in groupby(sorted(test,key=lambda x:x[0][1]),key=lambda x:x[0][1]):
g_values = list(val)
keys = [i[1] for i in g_values]
result.append(list([g_values[0][0]] + keys))
print(sorted(result,key=lambda x:x[0][0]))
您可以使用collections.defaultdict创建列表字典。然后使用列表理解将键与列表中的值链接。与itertools.groupby不同,该解决方案具有较高的复杂性,因为它不需要事先排序
test = [[[0.52, '1_1man::army'], 'stack'],
[[0.45, '3_3man::army'], 'flow'],
[[0.52, '1_1man::army'], 'testing'],
[[0.52, '2_2man:army'], 'expert']]
from collections import defaultdict
d = defaultdict(list)
for key, value in test:
d[tuple(key)].append(value)
res = [[k]+v for *k, v in d.items()]
结果
您可以使用collections.defaultdict创建列表字典。然后使用列表理解将键与列表中的值链接。与itertools.groupby不同,该解决方案具有较高的复杂性,因为它不需要事先排序
test = [[[0.52, '1_1man::army'], 'stack'],
[[0.45, '3_3man::army'], 'flow'],
[[0.52, '1_1man::army'], 'testing'],
[[0.52, '2_2man:army'], 'expert']]
from collections import defaultdict
d = defaultdict(list)
for key, value in test:
d[tuple(key)].append(value)
res = [[k]+v for *k, v in d.items()]
结果
它是列表中的一个列表。如果你使用测试[0],你会得到[0.52,'1_1man::army','stack','testing',],如果你使用测试[0][0],你会得到0.52分,我重新编辑了我的问题。我犯了一个错误,你能帮我吗?第一步,你想做一个groupby操作,第二步,你想做一个排序。是的,我想把它分组,然后再排序。我也编辑了我的排序部分。它是列表中的一个列表。如果你使用测试[0],你会得到[0.52,'1_1man::army','stack','testing',],如果你使用测试[0][0],你会得到0.52分,我重新编辑了我的问题。我犯了一个错误,你能帮我吗?第一步,你想做一个groupby操作,第二步,你想做一个排序。是的,我想把它分组,然后再排序。我也编辑了我的排序部分。先生,如果我需要从文本文件加载呢?例如,我的文本文件如下[0.52,'1_1man::army'],'stack'][0.45,'3_3man::army'],'flow'][0.52,'1_1man::army'],'testing'][0.52,'2_2man:army'],'expert']谢谢,先生,请问如何加载文本文件?我在最下面的部分更新了我的问题,先生,你能帮我吗?先生,我不能用你的解决方案来排序。顺便说一句,你能帮我加载文件吗?对不起,我反应太晚了。该值以某种方式根据[0][1]而不是[0][0]数值排序。我使用了你给出的解决方案,但排序不同。先生,如果我需要从文本文件加载呢?例如,我的文本文件如下[0.52,'1_1man::army'],'stack'][0.45,'3_3man::army'],'flow'][0.52,'1_1man::army'],'testing'][0.52,'2_2man:army'],'expert']谢谢,先生,请问如何加载文本文件?我在最下面的部分更新了我的问题,先生,你能帮我吗?先生,我不能用你的解决方案来排序。顺便说一句,你能帮我加载文件吗?对不起,我反应太晚了。该值以某种方式根据[0][1]而不是[0][0]数值排序。我使用了你给出的解决方案,但排序不同。