python - 组合元组列表中的元组元素。元组元素是元组和列表

标签 python list

我对 Python 比较陌生,很难想出一种方法来完成以下工作。目前,我有一个元组列表(大于 list_one)。这些元组内的元素是 1) 元组和 2) 字符串(这些字符串始终是两个值之一:在示例中 'A''B'(也可以是 'D''Z',或任何其他两个字符串)。内部元组包括 'id' 和值(字符串)的 list:

list_one = [(('id1', ['v1', 'v2']), 'A'), (('id2', ['v3', 'v4', 'v5', 'v6']), 'A'), (('id3', ['v11']), 'B'), (('id4', ['v12', 'v13']), 'B'), (('id5', ['v14', 'v16']), 'B'), (('id6', ['v17', 'v18', 'v21']), 'A')]

我正在尝试创建一个如下所示的新列表,但没有成功:

new_list1 = [('id1',['v1', 'v2', 'v3', 'v4', 'v5', 'v6']), ('id3',['v11', 'v12', 'v13', 'v14', 'v16']), ('id6',['v17', 'v18', 'v21'])]

当字符串值(A,B)更改时,它应该创建一个新元组,其中第一个元素是 A,B 更改的初始元组的 id,第二个元素是值列表(“v's ") 在初始列表中。字典列表也可以,例如:

new_list2 = [{'id1': ['v1','v2', 'v3', 'v4', 'v5', 'v6']}, {'id3':['v11', 'v12', 'v13', 'v14', 'v16']}, {'id6':['v17', 'v18', 'v21']}]

我感谢任何指导。

编辑:

s = list_one[0][1]
for tup in list_one:
    if s in tup:
        new_list.extend(tup[0][1])
    else:
        new_list.append(tup[0][1])

给出:

 ['v1', 'v2', 'v3', 'v4', 'v5', 'v6', ['v11'], ['v12', 'v13'], ['v14', 'v16'], 'v17', 'v18', 'v21']

这并不是我真正想要的,因为这会创建一个围绕“A”值的列表,其中包含“B”列表。

最佳答案

您基本上可以循环,记住当前的键是什么(初始化为None)。

key = None # This is 'A' or 'B' in your example, but it starts off as None
new_list = [] # This holds the final result
for r, l in [(r, l) for (l, r) in list_one]: 
    if r != key: # If the current is not the key, time to switch to a new one
        id_ = l[0]
        new_list.append({id_: []})
    new_list[-1][id_].extend(l[1]) # Extend the current list
    key = r # Make it the current key in any case.

>>> new_list
[{'id1': ['v1', 'v2', 'v3', 'v4', 'v5', 'v6']},
 {'id3': ['v11', 'v12', 'v13', 'v14', 'v16']},
 {'id6': ['v17', 'v18', 'v21']}]

关于python - 组合元组列表中的元组元素。元组元素是元组和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38924829/

相关文章:

python - 我想要三个已安装的 PyQt DLL 目录中的哪一个?

python - 'max_pooling2d_8/MaxPool' 1 减 3 导致的负维度大小

python - Boto3 无效参数异常

python - 如何使用一种格式化程序来记录文件并使用彩色格式化程序来记录终端?

python - 按列表中匹配的任何第一项拆分文本

c++ - 将坐标舍入到列表中最接近的坐标

python - 将 Excel 表转换为有组织的 Pandas Dataframe

python - 根据列表中可能具有可变长度的元素创建 "or"条件

Python:将列表中的字符串值更改为 ascii 值

python - 添加列表的元素