gpt4 book ai didi

python - 通过相等的第一个字段组合/分组/合并列表列表,在字符串中加入第二个字段并在其他字段中写入相同的数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:05 25 4
gpt4 key购买 nike

例如,我有一个列表,我可以按前 2 个字段对它进行排序,没关系:

import operator
list = [
['1', '2', '3'],
['1', '5', '6'],
['2', '8', '9', '8', '17'],
['2', '3', '5', '3'],
['1', '14', '89', '34', '15'],
]
sorted_list = sorted(list, key=operator.itemgetter(0, 1))

获得:

['1', '14', '89', '34', '15']
['1', '2', '3']
['1', '5', '6']
['2', '3', '5', '3']
['2', '8', '9', '8', '17']

所以,我需要的是按第一个字段组合这些列表,第一步是 [0][0]、[0][1]、[0][2] 中的“1”,然后我用逗号之类的东西加入第二个字段:“14:2:5”,我不在乎,然后我追加那 3 个列表的哪一部分,所以,在 '|' 之后它可以是以下任何一种:

['1', '14:2:5',| '89', '34', '15']
['1', '14:2:5',| '3']
['1', '14:2:5',| '6']

(在大多数情况下,“|”之后的数据将匹配第一个字段)

最后,我想要这样的东西:

['1', '14:2:5', '89', '34', '15']
['2', '3:8', '5', '3']

我目前正处于某种 for 循环中并一直得到 IndexError :-(我觉得它应该更容易 pythonic 方式。还不知道如何找到这个算法以及它是如何调用的。类似于列表列表 reduce-map-shrink-normalization 元素,通过元素值附加另一个?


非常感谢您的帮助,python 中的东西仍然让我感到惊讶,它可以完成得多么酷,最终从所有答案来看,对于 python 3:

# -*- coding: utf-8 -*-
import operator
import itertools
from natsort import humansorted

list_to_sort = [
['1', 'A', '3'],
['1', '5', '6'],
['1', '1', '10', '11', '12'],
['t', 'S', '7', '0asdf'],
['2', '8', '9', '8', '17'],
['2', '705', '5', '3'],
['2', 'checks', 'df', '1'],
['1', '14', '89', '34', '15'],
]

sorted_list = humansorted(list_to_sort, key=operator.itemgetter(0, 1))
grouped = [list(g) for k, g in itertools.groupby(sorted_list, key=lambda x: x[0])]
out = [[gg[0][0], ':'.join([g[1] for g in gg])] + gg[0][2:] for gg in grouped]

for elem in out:
print(elem)

最佳答案

一旦您对列表进行排序以便您的第一个字段组是连续的,您可以使用 itertools.groupby做繁重的工作:

>>> grouped = [list(g) for k,g in groupby(sorted_list, key=lambda x: x[0])]
>>> grouped
[[['1', '14', '89', '34', '15'], ['1', '2', '3'], ['1', '5', '6']], [['2', '3', '5', '3'], ['2', '8', '9', '8', '17']]]
>>> out = [[gg[0][0], ':'.join([g[1] for g in gg])] + gg[0][2:] for gg in grouped]
>>> out
[['1', '14:2:5', '89', '34', '15'], ['2', '3:8', '5', '3']]

关于python - 通过相等的第一个字段组合/分组/合并列表列表,在字符串中加入第二个字段并在其他字段中写入相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31973863/

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