Изменение формата данных в списке - PullRequest
0 голосов
/ 21 октября 2018

Мне нужно небольшое изменение в следующем коде.

from itertools import chain, combinations, product
from pprint import pprint


data = {
        'uc':(1, 'ABCDEF'),  
        'lc':(2, 'abcdef'),  
        'no':(3, '123456'), 
        }

def main():
    iters = [combinations(l,n) for n,l in data.values()]
    combine_list = []
    for count, group in data.values():
        print('picking {} of {}'.format(count, group))

        combine_list.append(list(combinations(group, count)))


    combos = list(product(*combine_list))
    pprint(combos)

main()

Вместо заданных наборов 'ABCDEF', 'abcdef' и '123456' я хочу ввести значения в этом формате:

data = {
        'uc':(1, '(A,B,C),(D,E),F'),  
        'lc':(2, '(a,b,c),(d,e),f'), 
        'no':(3, '(1,2,3),(4,5),6'), 
        }

, и в этом случае код будет обрабатывать значения между () как один элемент.Я попробовал это, но это не дает желаемого результата, когда я это делаю.Как мне это сделать, чтобы это работало?

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Вам просто нужно получить доступ к элементам dict и loop над элементами и упорядочить их в формате, который вам нравится:

data = {
        'uc':(1, 'ABCDEF'),  
        'lc':(2, 'abcdef'),  
        'no':(3, '123456'), 
        }

for k,v in data.items():
    num = v[0]
    strings = [i for i in v[1]]
    first = ','.join(i for i in strings[:3])
    second = ','.join(i for i in strings[3:5])
    third = strings[5]
    data[k] = (v[0],'({}),({}),{}'.format(first,second,third))

>> {'uc': (1, '(A,B,C),(D,E),F'),
 'lc': (2, '(a,b,c),(d,e),f'),
 'no': (3, '(1,2,3),(4,5),6')}
0 голосов
/ 21 октября 2018

Прямо сейчас у вас есть одна строка в качестве общей последовательности:

'(A,B,C),(D,E),F'

Возможно, вам нужен список элементов, например:

# the string '(A,B,C)' is a single element here
['(A,B,C)', '(D,E)', 'F']

или

# the tuple of strings ('A','B','C') is a single element here
[('A','B','C'),('D','E'),'F']
...