Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我如何根据特定位置的类似项目安排列表_Python_List - Fatal编程技术网

Python 我如何根据特定位置的类似项目安排列表

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']

我想安排第二部分的测试列表项=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', '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]数值排序。我使用了你给出的解决方案,但排序不同。