Как объединить элементы из списка с другим вложенным списком? - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь объединить список с вложенным списком, но без использования словаря, потому что словарь не придерживается того же порядка, и это немного мешает тому, что я делаю. Не уверен, что это возможно, но в основном то, что у меня есть:

list1=['a','b','c','d','e']
list2=[['1','2','3'],['4','5','6'],['7','8','9'],['T1','T2','T3'],[]]

и вывод мне нужен:

[['a_1','a_2','a_3'],['b_4','b_5','b_6'],['c_7','c_8','c_9'],['d_T1','d_T2','d_T3'],['e']]

Я могу сделать это с помощью словаря с таким кодом:

dict = dict(zip(list1, list2))
for key,values in dict.iteritems():
    vals = dict[key]
    values = [key + '_' + str(v) for v in vals]
    test.append(values)

но порядок не тот, и мне нужно сопоставить несколько списков позже ... Так что я действительно предпочел бы избегать словарной части, у кого-нибудь есть идеи?

Спасибо!

1 Ответ

2 голосов
/ 03 июня 2019

вы были почти там:

test = []
for key, values in zip(list1, list2):
    if values:
        values = [key + "_" + str(v) for v in values]
        test.append(values)
    else:
        test.append([key])
print(test)

просто переберите пары из zip;если вы упакуете это в dict сначала, это испортит порядок в python 2 (в python> = 3.4 у вас все хорошо!).

вы также можете упаковать все это непосредственно в понимание списка (ивозможно используйте форматирование строки):

test = [
    ["{}_{}".format(key, v) for v in values] if values else [key]
    for key, values in zip(list1, list2)
]
...