我想要排列第二部分的“测试”列表项= "1_1man:Army“,它们有相似的单词,然后排列它,使"1_1man: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']]代码:
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']如何加载?
发布于 2018-08-27 17:12:26
你可以用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]))发布于 2018-08-27 18:59:46
您可以使用collections.defaultdict创建列表字典。然后使用列表理解将关键字与列表列表中的值链接起来。与itertools.groupby不同,该解决方案的复杂度为O(n),因为它不需要事先排序。
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()]结果
print(res)
[[[(0.52, '1_1man::army')], 'stack', 'testing'],
[[(0.45, '3_3man::army')], 'flow'],
[[(0.52, '2_2man:army')], 'expert']]https://stackoverflow.com/questions/52035779
复制相似问题