из файла в словарь

есть файл

Daniel, 2  
20, slow, card 
3, quick, card  
30, slow, cash  
17, normal, card  
Katka, 1.5  
13, slow, cash  
24, normal, card  
Robo, 1  
5, normal, cash  
11, quick, card  
8, slow, card  
Sandra, 1.25  
38, slow, cash  

нужно получить

словарь  = {('Daniel', 2.0): [(20, 'slow', 'card'), (3, 'quick', 'card'), (30, 'slow', 'cash'), (17, 'normal', 'card')],('Katka', 1.5): [(13, 'slow', 'cash'), (24, 'normal', 'card')], ('Robo', 1.0): [(5, 'normal', 'cash'), (11, 'quick', 'card'), (8, 'slow', 'card')], ('Sandra', 1.25): [(38, 'slow', 'cash')]}

это часть задания

вторая часть посчитать длинну очереди (время ожидания)

n=0
array1=[]
speed=0
d={}
with open("D:\F\sample1.txt") as file:
    for line in file:
        array1=line.strip().split(', ')
        if (len(array1)==2):
            data=''
            if len(k)>0:
               k=k+']'
               # тут формирую справочник
               d[k]=data
            kassir=array1[0]
            speed=float(array1[1])
            k='('+"'"+kassir+"'"+'), '+str(spped)+': ['
            print(" Key "+k)
            n=+1
        else:
            print(" P "+str(array1))
            q_=float(array1[0])
            type_kust=array1[1]
            type_pay=array1[2]
            if len(data)>0:
               data=data+', ' 
            data='('+str(q_)+', '+"'"+type_kust+"', '"+type_pay+'")'
            print(data)
    k=k+']'
    d[k]=data

Ответы (1 шт):

Автор решения: Jack_oS

Для sample.txt с содержимым:

Daniel, 2
20, slow, card
3, quick, card
30, slow, cash
17, normal, card
Katka, 1.5
13, slow, cash
24, normal, card
Robo, 1
5, normal, cash
11, quick, card
8, slow, card
Sandra, 1.25
38, slow, cash

можно использовать такой код:

with open('sample.txt') as f:
    lines = f.readlines()

data = dict()

for line in lines:
    line_elements = line.replace('\n', '').split(', ')

    if line_elements[0].isalpha():
        current_cashier = (line_elements[0], float(line_elements[1]))
        data[current_cashier] = []
    else:
        customer = (int(line_elements[0]), line_elements[1], line_elements[2])
        data[current_cashier].append(customer)

в итоге в data будет словарь

{
    ('Daniel', 2.0): [(20, 'slow', 'card'), (3, 'quick', 'card'), (30, 'slow', 'cash'), (17, 'normal', 'card')], 
    ('Katka', 1.5): [(13, 'slow', 'cash'), (24, 'normal', 'card')], 
    ('Robo', 1.0): [(5, 'normal', 'cash'), (11, 'quick', 'card'), (8, 'slow', 'card')], 
    ('Sandra', 1.25): [(38, 'slow', 'cash')]
}
→ Ссылка