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

时间:2016-08-12 19:00:14

标签: python list

我对Python相对较新,并且很难想出一种方法来完成以下工作。目前,我有一个元组列表(大于list_one。这些元组中的元素是1)一个元组,2)一个字符串(这些字符串总是两个值中的一个:在示例中{{1} }或'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')]

当字符串值(A,B)发生变化时,它应该创建一个新元组,第一个元素是初始元组的id,其中A,B发生变化,第二个元素是值列表(&# 34; v' s")在初始列表中。如果字典也可以,那就是一个列表,例如:

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

我感谢任何指导。

编辑:

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

这并不是我真正想要的,因为这会创建一个围绕着A' A'价值,以及' B'内部。

2 个答案:

答案 0 :(得分:1)

修改

这解决了相关问题,其中汇总了与'A''B'值对应的所有列表,并且为每个组选择了ID的总ID。

你去吧

letterKeyToFirstIDMap = {}
result_dict = {}

for tpl in list_one:

  id = tpl[0][0]
  lst = tpl[0][1]
  letter_id = tpl[1]
  if not letter_id in letterKeyToFirstIDMap: 
    letterKeyToFirstIDMap.update({letter_id: id})
    result_dict.update({id:[]})

  result_dict[letterKeyToFirstIDMap[letter_id]] += lst

print result_dict

这里所做的是,对于每个字母键(比如说A),您只希望第一个符合的id(比如id1)成为以下列表的键。您创建一个映射以在第一次出现时存储letterKey及其idKey,然后只检查该映射中是否已存在字母键,如果是,则使用相应的idKey,并更新列表。

答案 1 :(得分:1)

你基本上可以循环,记住当前键是什么(初始化为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']}]