我对 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/