Trochę noworodku tutaj, próbując zrobić słownik z złomowanej tabeli.

Złomowałem stół za pomocą selenu, który nie miał różnych nagłówków i komórek, a teraz utknąłem z załącznikową listą, które udało mi się, które funkcjonowały po raz pierwszy nazwy nagłówka, a następnie wszystkie wartości, takie jak:

list = [H1, H2, H3, ValueA1, ValueA2, ValueA3, ValueB1, ValueB2, ValueB3 ....]

Moje żądane wyjście to lista słowników, które posiada pierwsze trzy obiekty jako klucze słownikowe, a następne trzy jako obiekty, ponieważ wartości słownika i tak dalej.

Dziękuję Ci

0
Yian 27 czerwiec 2017, 08:39

3 odpowiedzi

Najlepsza odpowiedź

Choć jest to żądanie kodu, ugryzę:

In [3]: l = ['asdf', 'qwer', 1, 2, 3, 4, 5, 6, 7, 8]

In [4]: n_headers = 2

In [5]: [{k: v for k, v in zip(l[:n_headers], l[i:i + n_headers])}                            
         for i in range(n_headers, len(l), n_headers)]
Out[5]: 
[{'qwer': 2, 'asdf': 1},
 {'qwer': 4, 'asdf': 3},
 {'qwer': 6, 'asdf': 5},
 {'qwer': 8, 'asdf': 7}]

To skończy krojenie całkiem kilka razy, które można uniknąć sztuczki iter():

In [9]: g = zip(*[iter(l)] * 2)

In [10]: hdrs = next(g)

In [11]: hdrs
Out[11]: ('asdf', 'qwer')

In [12]: [{k: v for k, v in zip(hdrs, h)} for h in g]
Out[12]: 
[{'qwer': 2, 'asdf': 1},
 {'qwer': 4, 'asdf': 3},
 {'qwer': 6, 'asdf': 5},
 {'qwer': 8, 'asdf': 7}]
0
Ilja Everilä 27 czerwiec 2017, 06:14

Użyj kombinacji zamka, iter. Zakładając 3 nagłówki ..

lst = [ 'H1', 'H2', 'H3', 'ValueA1', 'ValueA2', 'ValueA3', 'ValueB1', 'ValueB2', 'ValueB3', 'ValueC1', 'ValueC2', 'ValueC3' ]
grps = list( zip(*([iter(lst)] * 3)) ) 
[ dict( zip( grps[0], grps[i]) ) for i in range(1,len(grps))]

Wynik:

[{'H1': 'ValueA1', 'H2': 'ValueA2', 'H3': 'ValueA3'},
 {'H1': 'ValueB1', 'H2': 'ValueB2', 'H3': 'ValueB3'},
 {'H1': 'ValueC1', 'H2': 'ValueC2', 'H3': 'ValueC3'}]
0
Transhuman 27 czerwiec 2017, 06:09

Niejasny, jeśli szukasz, ale dla "listy" słowników:

i = 3
d={}
result=[]
while i < len(list): #Iterating over list

    d[list[i%3]]=list[i]
    i += 1
    if (i%3==0):  #Add to your list for every third element
        result.append(d)
        d={}

Wyjście byłoby wzdłuż linii

[{'H2': 'ValueA2', 'H3': 'ValueA3', 'H1': 'ValueA1'}, {'H2': 'ValueB2', 'H3': 'ValueB3', 'H1': 'ValueB1'}]
0
rt88 27 czerwiec 2017, 06:04