gpt4 book ai didi

python - 如何根据特定位置的类似项目排列列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:07 25 4
gpt4 key购买 nike

我想安排第二部分的“测试”列表项=“1_1man:Army”,它们具有相似的词然后安排它以便“1_1man:Army”之后的值是“stack”的值和“测试”在新列中彼此相邻。

输入:

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

代码:

for x in test:
print(x[0][1])

预期输出:

打印(测试)

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 来做到这一点,

In [41]: from itertools import groupby
In [42]: 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]
...: print list([g_values[0][0]] + keys)
...:
...:
[[0.52, '1_1man::army'], 'stack', 'testing']
[[0.52, '2_2man:army'], 'expert']
[[0.45, '3_3man::army'], 'flow']

sorted 在这里很重要,对于 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]))

关于python - 如何根据特定位置的类似项目排列列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52035779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com